下面的例子是将应用程序对 话框设置为蓝色背景和红色文本
对于分布在对话框上的控件,我们可以修改其颜色、其背景颜色,比如对静态文本、文本编辑框、列表框等等。
重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):
①在CExampleDlgDlg的头文件中,添加一个CBrush的成员变量:
class CExampleDlgDlg : public CDialog
{...
protected: CBrush m_brush;
...
};
②在OnInitDialog()函数中添加如下代码:
BOOL CExampleDlgDlg::OnInitDialog ()
{
... // TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
...
}
③:利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息):
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor ==CTLCOLOR_DLG) //对话框颜色
return m_brush; //返加绿色刷子
if(nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_STATIC) //静态文本颜色,并且指定控件ID号
{ pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(191,219,255)); //静态控件的背景颜色设置,红字蓝底。
//pDC->SetBkMode(TRANSPARENT); //模式设置透明的话,则忽略静态控件的背景颜色设置,与对话框颜色融合,这条语句运行,与对话框即MFC背景图像融合,保持一致。 与上条语句二选一
hbr=(HBRUSH)m_brush; }
if(nCtlColor==CTLCOLOR_EDIT) //文本编辑框颜色
{ pDC->SetTextColor(RGB(0,0,255));
//pDC->SetBkColor(RGB(191,219,255)); //静态控件的背景颜色设置
pDC->SetBkMode(TRANSPARENT); //与上条语句二选一
hbr=(HBRUSH)m_brush; }
return hbr;
}
添加WM_CTLCOLOR消息图例:
对于其中nCtlColor类型,即它的取值:
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滑动条
CTLCOLOR_STATIC 静态文本框、矩形等。