Ребята, может кто-нибудь вкратце расскажет, как изменить цвет фона элемента управления 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);
}