如何实现所有控件的扁平效果???求教!!!!!

fengying2001 2002-12-18 10:37:15
有没有可以使所有的控件实现扁平效果?我见过有一个程序中所有的控件都有扁平效果,即鼠标放上去之后控件的下边缘和右边缘会出现立体效果!!(或者整个控件的边缘都出现立体效果)怎么实现的?有谁知道?应该是一个外部代码? 请注意是所有控件!!!!!!应该是有现成的类或是一些现成的代码!!!
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nonocast 2002-12-18
  • 打赏
  • 举报
回复
CButtonST可以实现你想要的所有功能
下载地址
http://www.vckbase.com/code/listcode.asp?mclsid=3&sclsid=301

搂主给分吧
zwvista 2002-12-18
  • 打赏
  • 举报
回复
需要提醒搂主的是,所有控件都实现此效果是不可能的,这个程序也只是做到了改写它所支持的Windows标准控件而已。这样的界面在Windows XP下面就显得丑陋,不合时宜了。
zwvista 2002-12-18
  • 打赏
  • 举报
回复
楼主所看到的程序应该是
http://www.codeguru.com/controls/CoolControlsLibrary.shtml
其基本思想是通过给控件的窗口函数挂钩,用自己的绘制方法来实现的,由于控件的多样性,其代码量相当大,值得学习。
fupinger 2002-12-18
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "Manerger.h"
#include "MyEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyEdit

CMyEdit::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 handlers

void 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);
}
fupinger 2002-12-18
  • 打赏
  • 举报
回复
贴出部分代码:
// MyEdit.h : header file
//
#define FE_MOUSEOVER 1
#define FE_MOUSEOUT 2

/////////////////////////////////////////////////////////////////////////////
// CMyEdit window

class 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_)
fupinger 2002-12-18
  • 打赏
  • 举报
回复
我做上个项目时重写了Edit,Button,CombBox三个控件,如果需要,Email

其实写出来的效果就是回到了从前的二维界面……

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧