2008-10-20 4 views
4

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

ответ

6

Вы не можете сделать это с помощью простого CEdit, вам нужно переопределить несколько бит.

Реализовать свой собственный обработчик ON_WM_CTLCOLOR_REFLECT, а затем вернуть цветной CBrush в обработчике:

(грубо говоря, вам нужно поставить обычное управление ресурсами там, rememebr удалить кисть в деструкторе)

class CColorEdit : public CEdit 
{ 
    .... 
    CBrush m_brBkgnd; 
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor) 
    { 
    m_brBkgnd.DeleteObject(); 
    m_brBkgnd.CreateSolidBrush(nCtlColor); 
    } 
} 
3

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