必须借助 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();