有没有可以使所有的控件实现扁平效果?我见过有一个程序中所有的控件都有扁平效果,即鼠标放上去之后控件的下边缘和右边缘会出现立体效果!!(或者整个控件的边缘都出现立体效果)怎么实现的?有谁知道?应该是一个外部代码? 请注意是所有控件!!!!!!应该是有现成的类或是一些现成的代码!!!
解决方案 »
- 怎么制作VC-MFC(Dialog)的分割(切分)视图,网上全是用于view类型的.
- 关于在CDhtmldialog中ajax跨域的问题!!!
- 对话框问题
- 用函数作为参数传的的问题。
- C ,C++ ,VC, VC++
- 小问题
- WinSocket编程时的指针问题… …(急,急)
- 为什么button不执行click事件?
- 下面的问题怎样解决?TC3.0下,Linker Error:Group DGROUP exceeds 64K
- 使用HttpQueryInfo 这个函数有什么注意事项?
- 用什么办法得到vc可执行exe文件中的一些资源(例如界面上显示的一些提示等)
- COM+服务器在客户端为什么释放不了??????????
下载地址
http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=301搂主给分吧
// MyEdit.h : header file
//
#define FE_MOUSEOVER 1
#define FE_MOUSEOUT 2/////////////////////////////////////////////////////////////////////////////
// CMyEdit windowclass CMyEdit : public CEdit
{
// Construction
public:
CMyEdit();
bool m_bFlatStyle;
bool m_bDrawGripper;
bool m_bDrawSeperator;// Attributes
public:
bool m_bLBtnDown;
COLORREF m_clrHilite;
COLORREF m_clrShadow;
COLORREF m_clrDkShad;
COLORREF m_clrButton;// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyEdit)
//}}AFX_VIRTUAL// Implementation
public:
void SetIndent(int margin);
void DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight);
virtual ~CMyEdit(); // Generated message map functions
protected:
//{{AFX_MSG(CMyEdit)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg void OnSysColorChange();
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MYEDIT_H__11086D8D_DD05_4977_A8E9_0BE5CCE562B8__INCLUDED_)
#include "Manerger.h"
#include "MyEdit.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CMyEditCMyEdit::CMyEdit()
{
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
m_bDrawGripper = TRUE;
m_bDrawSeperator = TRUE;
m_bFlatStyle = TRUE;
}CMyEdit::~CMyEdit()
{
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
//{{AFX_MSG_MAP(CMyEdit)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
ON_WM_SYSCOLORCHANGE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMyEdit message handlersvoid CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
{
SetTimer(1, 10, NULL);
CEdit::OnMouseMove(nFlags, point);
}void CMyEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBtnDown = true;
CEdit::OnLButtonDown(nFlags, point);
}void CMyEdit::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBtnDown = false;
CEdit::OnLButtonUp(nFlags, point);
}void CMyEdit::OnTimer(UINT nIDEvent)
{
POINT pt;
GetCursorPos(&pt);
CRect rcItem;
GetWindowRect(&rcItem); static bool bPainted = false; if(!rcItem.PtInRect(pt)) {
KillTimer(1);
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);
return;
}
else {
DrawEdit(FE_MOUSEOVER, m_clrShadow, m_clrHilite);
}
CEdit::OnTimer(nIDEvent);
}void CMyEdit::OnPaint()
{
Default();
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);
}void CMyEdit::OnSysColorChange()
{
CEdit::OnSysColorChange();
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
}void CMyEdit::DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight)
{
CRect rcItem;
CRect rcGripper;
CRect rcSeperator; GetClientRect(&rcItem);
GetClientRect(&rcGripper);
GetClientRect(&rcSeperator); CDC* pDC = GetDC();
COLORREF clrBlack;
clrBlack = RGB(0, 0, 0); if(m_bFlatStyle)
{
pDC->Draw3dRect(rcItem, clrTopLeft, clrBottomRight);
rcItem.InflateRect(1,1);
if (!IsWindowEnabled()) {
pDC->Draw3dRect(rcItem, m_clrHilite, m_clrHilite);
}
else {
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
} rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4); pDC->MoveTo (rcItem.left -1,rcItem.top-1);
pDC->LineTo(rcItem.right,rcItem.top-1);
pDC->LineTo(rcItem.right,rcItem.bottom);
pDC->LineTo(rcItem.left -1,rcItem.bottom);
pDC->LineTo(rcItem.left -1,rcItem.top-1); if (!IsWindowEnabled()) {
return;
}
if(style == FE_MOUSEOVER)
{
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); //added this
rcItem.top -= 1; //added this
rcItem.left -= 1;
rcItem.bottom += 1;
rcItem.right += 1; //added this
pDC->Draw3dRect(rcItem, m_clrShadow, m_clrHilite); //was hilite, shadow
}
}
else
{
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4);
if(m_bDrawGripper)
{
rcGripper.top = rcItem.top - 2;
rcGripper.bottom = rcItem.bottom + 2;
rcGripper.left -= 6;
rcGripper.right = rcGripper.left + 2;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
rcGripper.left -= 3;
rcGripper.right -= 3;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
} if(m_bDrawSeperator)
{
rcSeperator.top = rcItem.top - 2;
rcSeperator.bottom = rcItem.bottom + 2;
rcSeperator.left = rcItem.right + 4;
rcSeperator.right = rcSeperator.left + 2;
pDC->Draw3dRect(rcSeperator, clrBlack, clrBlack);
}
} ReleaseDC(pDC);
}void CMyEdit::SetIndent(int margin)
{
SetMargins(margin, 1);
}
http://www.codeguru.com/controls/CoolControlsLibrary.shtml
其基本思想是通过给控件的窗口函数挂钩,用自己的绘制方法来实现的,由于控件的多样性,其代码量相当大,值得学习。