OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); |
参数分析:
pDC 包含了子窗口的显示设备环境的指针。可能是临时的。
pWnd 包含了要求颜色的控件的指针。可能是临时的。
nCtlColor 包含了下列值,指定了控件的类型:
· CTLCOLOR_BTN 按钮控件
· CTLCOLOR_DLG 对话框
· CTLCOLOR_EDIT 编辑控件
· CTLCOLOR_LISTBOX 列表框控件
· CTLCOLOR_MSGBOX 消息框
· CTLCOLOR_SCROLLBAR 滚动条控件
· CTLCOLOR_STATIC 静态控件
返回值:
返回一个句柄是控制背景的画刷
备注:
个人使用
添加私有变量 BRUSH m_brush,之后
重载WM_CTLCOLOR消息的响应函数:
【程序实现】
1.假设你有一个CTextDialog, 你有了一个STATIC的控件,ID为IDC_STATIC1
HBRUSH CTextDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (nCtlColor==CTLCOLOR_STATIC) { pDC-> SetTextColor(RGB(255,0,0)); //字体颜色 pDC-> SetBkColor(RGB(0, 0, 255)); //字体背景色 } // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; }
备注:
BLACK_BRUSH:黑色
WHITE_BRUSH:白色
GRAY_BRUSH:灰色
NULL_BRUSH:透明
HOLLOW_BRUSH:透明
TRANSPARENT :透明
待完善
http://msdn.microsoft.com/en-us/library/0wwk06hc%28v=VS.80%29.aspx
http://blog.sina.com.cn/s/blog_7d1dc9de010115uu.html