MFC:更改 CEdit 的颜色
Posted
技术标签:
【中文标题】MFC:更改 CEdit 的颜色【英文标题】:MFC: Changing the colour of CEdit 【发布时间】:2008-10-20 10:50:53 【问题描述】:各位,谁能给我简要介绍一下如何在运行时更改 CEdit 控件的背景颜色?如果字段长度为零,我希望能够将背景更改为红色,否则为正常的白色。
【问题讨论】:
【参考方案1】:你不能用普通的 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);
【讨论】:
【参考方案2】:这也可以在不从 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);
【讨论】:
以上是关于MFC:更改 CEdit 的颜色的主要内容,如果未能解决你的问题,请参考以下文章
[WTL/ATL]_[初级]_[如何设置CEdit的文本框背景色和文字颜色]
[WTL/ATL]_[初级]_[如何设置CEdit的文本框背景色和文字颜色]
[WTL/ATL]_[初级]_[如何设置CEdit的文本框背景色和文字颜色]
编辑框等控件边框美化(继承CEdit,然后覆盖OnMouseLeave, OnSetFocus, OnPaint函数即可。原来的CEdit虽然代码不可见,但它也是有句柄的,照样随便画)