MFC: изменение цвета CEdit
-
03-07-2019 - |
Вопрос
Ребята, кто-нибудь может дать мне краткий обзор того, как изменить цвет фона элемента управления 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);
}
Не связан с StackOverflow