一 MFC改变控件颜色的方法:
MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor()函数来实现。方法是在该函数中设置所需颜色后再返回一个画刷句柄便可 重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。
常用的此类消息有:
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滑动条
CTLCOLOR_STATIC 静态文本框、矩形等。
注意:此方法不适用于按钮控件。
主要有三步:
1. 声明消息响应函数
// 生成的消息映射函数
afx_msg HBRUSHOnCtlColor(CDC*pDC, CWnd* pWnd, UINTnCtlColor);
DECLARE_MESSAGE_MAP()
2. 实现消息响应函数
以编辑框举例:
HBRUSH CMyDialog::OnCtlColor(CDC*pDC, CWnd* pWnd,UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd,nCtlColor);
if(nCtlColor == CTLCOLOR_EDIT &&pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
pDC->SetTextColor(RGB(0,0,255)); //设置文本颜色
pDC->SetBkColor(RGB(255,0,0)); //设置文本背景色
pDC->SetBkMode(TRANSPARENT); //设置背景透明
hbr = ::CreateSolidBrush(RGB(255,0,0));
}
return hbr;
}
3. 添加消息映射
BEGIN_MESSAGE_MAP(CMyDialog,CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()