MFC:更改CEdit的颜色

时间:2008-10-20 10:50:53

标签: visual-c++ mfc colors cedit

大家,有人可以简要介绍一下如何在运行时更改CEdit控件的背景颜色吗?如果字段长度为零,我希望能够将背景更改为红色,否则为正常白色。

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分:4)

这也可以在不从CEdit派生的情况下完成:

  1. ON_WM_CTLCOLOR()添加到对话框的BEGIN_MESSAGE_MAP()代码块。
  2. OnCltColor()添加到对话框类:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. 像这样实施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);
    }