MFC: изменение цвета CEdit - PullRequest
       21

MFC: изменение цвета CEdit

5 голосов
/ 20 октября 2008

Ребята, может кто-нибудь дать мне краткий обзор того, как изменить цвет фона элемента управления CEdit во время выполнения? Я хочу иметь возможность изменить фон на красный, если поле имеет нулевую длину и в противном случае нормальное белое.

Ответы [ 2 ]

7 голосов
/ 20 октября 2008

Вы не можете сделать это с простым 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);
  }
}
4 голосов
/ 30 апреля 2013

Это также можно сделать без использования 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);
    }
    
...