伙计们,有人能给我简要介绍一下如何在运行时更改 CEdit 控件的背景颜色吗?如果字段长度为零,我希望能够将背景更改为红色,否则为正常的白色。
Whyamistilltyping
问问题
13334 次
2 回答
7
你不能用一个普通的 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);
}
}
于 2008-10-20T10:59:39.973 回答
6
这也可以在不从 CEdit 派生的情况下完成:
- 添加
ON_WM_CTLCOLOR()
到对话框的BEGIN_MESSAGE_MAP()
代码块。 添加
OnCltColor()
到您的对话框类:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
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); }
于 2013-04-30T09:14:46.040 回答