Вопрос

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

Это было полезно?

Решение

Вы не можете сделать это с простым 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);
  }
}

Другие советы

Это также можно сделать без использования 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);
    }
    
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top