颜色控件






3.27/5 (8投票s)
2001年11月4日
2分钟阅读

102800

3377
为 MFC 控件添加颜色
引言
Chris Maunder 撰写的关于子类化的精彩文章激励我添加代码。更改常用控件的颜色通常很棘手,因为根据控件的不同,可能需要重写不同的函数。例如,要为 CButton
着色,您必须实现
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS)
而对于 CEdit
,您必须实现
virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
LRESULT* pLResult)
对于 CStatic
...
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
我经常发现自己在对话框类中重写 OnCtlColor
方法,然后使用 case 语句在各种控件之间切换。对于只有少量控件的应用程序,这种方法快速且简单。但是,当控件数量增加时,添加和删除颜色控件会变得繁琐且容易出错。它还将过多的逻辑放置在对话框类中。当前的类集为活动和禁用状态提供基本的着色,并添加颜色鼠标悬停效果(感谢 Chris!)。
接口
CColorButton, CColorEdit, CColorComboBox, CColorStatic
分别从 CButton, CEdit, CComboBox, CStatic
派生。它们还继承自 CColorControl
,后者为设置颜色提供相同的接口。
// FG is foreground color or text color // BG is background color of control // Hot refers to the on mouse over colors // void SetColors(const COLORREF FGColor,const COLORREF BGColor, const COLORREF HotFGColor, const COLORREF HotBGColor); void SetDisabledColors(const COLORREF DisabledFGColor, const COLORREF DisabledBGColor); // // void SetBgColor(COLORREF cr); void SetFgColor(COLORREF cr); void SetHotBgColor(COLORREF cr); void SetHotFgColor(COLORREF cr); void SetDisabledFgColor(COLORREF cr); void SetDisabledBgColor(COLORREF cr); // // Time is in milliseconds and dictates the delay after the mouse // leaves the rect of the control. The default is 10 milliseconds. // void SetRolloverDelay(UINT mSeconds );
用法
在将控件放入对话框编辑器后。
只需在类向导中声明成员变量。确保包含控件子类并重新生成,否则新的类可能不会出现在变量类型组合框中。
现在,在主对话框的 OnInitDialog
函数或 CWnd
的 OnCreate
函数中,设置控件所需的颜色。
m_btnColor.SetColors(RGB_GREEN, RGB_BLACK, RGB_WHITE, RGB_RED); m_btnDisabled.SetDisabledColors(RGB_WHITE, RGB_BLACK); m_btnDisabled.SetColors(RGB_RED, RGB_BLACK, RGB_RED, RGB_WHITE); m_edtColor.SetColors(RGB_GREEN, RGB_BLUE, RGB_WHITE, RGB_RED); m_cbColor.SetColors(RGB_BLUE, RGB_GREEN, RGB_WHITE, RGB_RED); m_stcColor.SetColors(RGB_GREEN, RGB_BLUE, RGB_WHITE, RGB_RED);
结论
就是这样。这些类集应该为您提供一种简单的方法来为您的控件添加颜色,而无需实现任何绘图或消息回调函数。如果您只需要颜色控件而不需要鼠标悬停效果,可以将 HotFGColor
设置为与 FGColor
相同,并将 HotBGColor
设置为与 BGColor
相同。
历史
2002 年 3 月 15 日 - 更新下载。