利用WM_CTLCOLOR消息实现编辑控制(Edit Control)的文本与背景色的改变
首先要明白:WM_CTLCOLOR是一个由控制(Control)发送给它父窗口的通知消息(Notification message)。
实现步骤:
生成一个标准的单文档应用程序框架,假设应用程序的名称为Color。我将利用它的About对话框做示范。在About dialog中添加两个Edit control,设定其ID为IDC_EDIT1与IDC_EDIT2。
第一种方法(对应于IDC_EDIT1): 按照标准的Windows编程,由其父窗口的消息处理函数负责处理WM_CTLCOLOR消息。
- 在CAboutDlg中添加一个数据成员:HBRUSH m_brMine;
- 利用向导映射AboutDlg的WM_CTLCOLOR消息,产生函数:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
pDC是AboutDlg的设备上下文,pWnd是AboutDlg中发送该消息的control指针,nCtlColor市Control的类型编码。对其进行如下修改:
1 | HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
第二种方法(对应于IDC_EDIT2):
利用MFC 4.0的新特性: Message reflection。
- 利用向导添加一个新的类:CColorEdit,基类为CEdit;
- 在CColorEdit中添加一个数据成员: HBRUSH m_bkBrush;
- 利用向导映射CColorEdit的"=WM_CTLCOLOR"消息,产生函数:
HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor);
对其进行如下修改:
1 | HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor) |
- 利用向导为IDC_EDIT2生成一个数据成员CColorEdit m_coloredit;
- 在定义CAboutDlg的color.cpp文件中加入:#include “coloredit.h”
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 水 流 记!