MFC 修改字体的颜色
-
- 一、使用OnCtlColor修改
-
- 1、添加方法
- 2、CWnd::OnCtlColor描述
-
- (1)、函数原型
- afx_msg HBRUSH OnCtlColor(
- CDC* pDC,
- CWnd* pWnd,
- UINT nCtlColor );
- 参数含义:
-
- pDC:包含指向子窗口的显示上下文的指针。可能是暂时的。
- pWnd:包含一个指向请求颜色的控件的指针。可能是暂时的。
- nCtlColor:包含以下值之一,指定控件的类型:
- CTLCOLOR_BTN-----Button control(按钮控件)
- CTLCOLOR_DLG-----Dialog box(窗口)
- CTLCOLOR_EDIT-----Edit control
- CTLCOLOR_LISTBOX-----List-box control
- CTLCOLOR_MSGBOX -----Message box
- CTLCOLOR_SCROLLBAR -----Scroll-bar control
- CTLCOLOR_STATIC -----Static control
- 之前遇到修改EDIT控件,但是OnCtlColor()没有调用的情况,找了好多解决方法,要不是太复杂就是效果不好(会闪烁)。
- OnCtlColor()一般在窗口需要更新的时候被调用。比如最小化后最大化、窗口被遮盖后重新显示,或调用窗口的invalidate 函数使窗口无效、或在程序刚启动的时候。
- 基于以上,因为SetWindowTextW( )会调用OnCtlColor(),所以可以用下面这个笨方法解决。
这是在学习过程中的笔记,所有不一定是完全正确的,有待以后慢慢修正与补充。文中借鉴了多篇文章加上自己的总结。
一、使用OnCtlColor修改
1、添加方法
(1)、类向导—>消息—>添加WM_CTLCOLOR消息。
(2)、手动添加。
A、.h文件中添加句柄刷子的声明
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
B、.cpp添加OnCtlColor()消息映射
BEGIN_MESSAGE_MAP(CDialogTab1, CDialog)
…………
ON_WM_CTLCOLOR()//
…………
END_MESSAGE_MAP()
C、在.cpp文件添加函数的实现
enum {Red,Black}EditTextColor
EditTextColor = Red;
HBRUSH CDialogTab1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
//设置Edit控件
if(nCtlColor