改变EDIT控件的背景颜色
解决方案 »
- 谁能给我个程序
- CS架构手机视频监控方案可行性分析(使用海康采集卡和DVR)。。。
- 求DDE 服务器端MFC对话框应用程序
- CRichEditView,使用GetRichEditCtrl()->ReplaceSel时,计算机出“嘟嘟”声?如何关掉
- setwindowshookex卸载后再次调用失败
- 如何取消重叠的读操作?
- treeview现实的树项前面没有“+”?
- 很是郁闷,不知道是DLL在哪里
- 谁能告诉我int&与int,CString&与CString等等的区别?
- 探讨WDM,vxd等驱动开发者,请于明天(2.4)晚7.0在驱动开发网见
- 求教一条SQL查询语句的写法,谢谢!
- 怎样在同一文件夹中建立2个文件名相同的文件?
加入 消息 WM_CTCOLOR,更改颜色
利用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消息。1. 在CAboutDlg中添加一个数据成员:HBRUSH m_brMine;
2. 利用向导映射AboutDlg的WM_CTLCOLOR消息,产生函数:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
pDC是AboutDlg的设备上下文,pWnd是AboutDlg中发送该消息的control指针,nCtlColor市Control的类型编码。对其进行如下修改:HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if ((pWnd->GetDlgCtrlID() == IDC_EDIT1) && (nCtlColor == CTLCOLOR_EDIT))
{
COLORREF clr = RGB(255,0,0);
pDC->SetTextColor(clr); //设置红色的文本
clr = RGB(0,0,0);
pDC->SetBkColor(clr); //设置黑色的背景
m_brMine = ::CreateSolidBrush(clr);
return m_brMine; //作为约定,返回背景色对应的刷子句柄
}
else
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
}第二种方法(对应于IDC_EDIT2):
利用MFC 4.0的新特性: Message reflection。1.利用向导添加一个新的类:CColorEdit,基类为CEdit;
2.在CColorEdit中添加一个数据成员: HBRUSH m_bkBrush;
3.利用向导映射CColorEdit的"=WM_CTLCOLOR"消息,产生函数:HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor); 对其进行如下修改:HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
COLORREF clr = RGB(0,0,0);
pDC->SetTextColor(clr); //设置黑色的文本
clr = RGB(255,0,0);
pDC->SetBkColor(clr); //设置红色的背景
m_bkBrush = ::CreateSolidBrush(clr);
return m_bkBrush; //作为约定,返回背景色对应的刷子句柄
}4.利用向导为IDC_EDIT2生成一个数据成员CColorEdit m_coloredit;
5.在定义CAboutDlg的color.cpp文件中加入:#include "coloredit.h"
在其中加入:
if (pWnd==GetDlgItem(IDC_YOUREDIT))
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,255,0));
CBrush YourBrush;
MyBrush.CreateSolidBrush(RGB(0,128,128));
hbr=(HBRUSH)MyBrush.GetSafeHandle();
}
最后
return hbr;