【问题标题】:MFC: Changing the colour of CEditMFC:更改 CEdit 的颜色
【发布时间】:2010-09-18 02:19:46
【问题描述】:

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

【问题讨论】:

    标签: visual-c++ mfc colors 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 派生的情况下完成:

      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);
        }
        

      【讨论】:

        猜你喜欢
        • 2022-12-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        相关资源
        最近更新 更多