MFC:更改CEdit的颜色

发布于 2024-07-07 04:50:09 字数 80 浏览 12 评论 0原文

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

Guys, can someone give me a brief run through of how to change the background colour of a CEdit control at runtime? I want to be able to change the background to red if the field is zero length and the normal white otherwise.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

脸赞 2024-07-14 04:50:09

您无法使用普通的 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);
  }
}

You cannot do it with a plain CEdit, you need to override a few bits.

Implement your own ON_WM_CTLCOLOR_REFLECT handler, then return your coloured CBrush in the handler:

(roughly, you'll need to put the usual resource management in there, rememebr to delete your brush in the destructor)

class CColorEdit : public CEdit
{
  ....
  CBrush   m_brBkgnd;
  afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
  {
    m_brBkgnd.DeleteObject();
    m_brBkgnd.CreateSolidBrush(nCtlColor);
  }
}
落日海湾 2024-07-14 04:50:09

这也可以在不从 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())) 
          { 
              返回m_brMyEditBk;   //在OnInitDialog()中创建画笔并在析构函数中销毁 
          } 
          返回 CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
      } 
      

This can also be done without deriving from CEdit:

  1. Add ON_WM_CTLCOLOR() to your dialog's BEGIN_MESSAGE_MAP() code block.
  2. Add OnCltColor() to your dialog class:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. Implement OnCtlColor() like so:

    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);
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文