Kon*_*rad 5 mfc colors cedit visual-c++
伙计们,有人可以简要介绍一下如何在运行时更改CEdit控件的背景颜色吗?如果字段长度为零,我希望能够将背景更改为红色,否则为正常白色.
你不能用普通的CEdit做,你需要覆盖几个位.
实现自己的ON_WM_CTLCOLOR_REFLECT处理程序,然后在处理程序中返回彩色CBrush:
(粗略地说,你需要将常用的资源管理放在那里,记得在析构函数中删除你的画笔)
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
Run Code Online (Sandbox Code Playgroud)
这也可以在不从 CEdit 派生的情况下完成:
ON_WM_CTLCOLOR()到对话框的BEGIN_MESSAGE_MAP()代码块。添加OnCltColor()到您的对话框类:
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
Run Code Online (Sandbox Code Playgroud)OnCtlColor()像这样实现:
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if ((CTLCOLOR_EDIT == nCtlColor) &&
(IDC_MY_EDIT == pWnd->GetDlgCtrlID()))
{
return m_brMyEditBk; //Create this brush in OnInitDialog() and destroy in destructor
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Run Code Online (Sandbox Code Playgroud)