必须借助 WM_CTLCOLOR消息来实现。
在控件所在对话框类的属性中增加WM_CTLCOLOR的消息相应函数:
OnCtlColor函数,修改此消息响应函数,可通过某全局变量来控制各控件的颜色设置。
注:不要试图通过人工调用 SendMessage 或者 PostMessage函数去发送WM_CTLCOLOR消息。
WM_CTLCOLOR消息响应是整个绘制对话框步骤中的一步,单独发送会出错。
如果需要设置某控件的背景色,
必须调用此控件的Invalidate()函数来实现:
((CEdit *)GetDlgItem(IDC_EDIT_XXX) ) ->Invalidate();
WM_CTLCOLOR消息响应函数:
HBRUSH CBarcodeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
COLORREF clr = RGB( 0,0,0);
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ( (nCtlColor == CTLCOLOR_EDIT) &&( FAIL == TRUE ) )
{
clr = RGB(255,0,0);
pDC->SetBkColor(clr); //设置红色的背景
HBRUSH m_brMine = ::CreateSolidBrush(clr);
DECODE_FAIL = FALSE;
return m_brMine; //返回的是背景色对应的刷子句柄
}
else if( (nCtlColor == CTLCOLOR_EDIT) &&( RECODE == TRUE ) )
{
clr = RGB( 127,255,0);
pDC->SetBkColor(clr);
HBRUSH m_brMine = ::CreateSolidBrush(clr);
DECODE_SUCCESS = FALSE;
return m_brMine;
}
else
{
clr = RGB( 255,255,255 );
pDC->SetBkColor(clr); //设置白色的背景
return hbr;
}
}
在需要修改控件背景色的地方输入:
FAIL = TRUE;
((CEdit *)GetDlgItem(IDC_EDIT_CNT))->Invalidate();