quitar color cambiar borde visual-c++ mfc colors cedit

visual c++ - borde - MFC: cambiar el color de CEdit



cambiar color de borde groupbox c# (2)

Chicos, ¿alguien me puede dar una breve explicación de cómo cambiar el color de fondo de un control CEdit en tiempo de ejecución? Quiero poder cambiar el fondo a rojo si el campo es de longitud cero y el blanco normal de lo contrario.


Esto también se puede hacer sin derivar de CEdit:

  1. Agregue ON_WM_CTLCOLOR() al bloque de código BEGIN_MESSAGE_MAP() su diálogo.
  2. Agregue OnCltColor() a su clase de diálogo:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

  3. Implemente OnCtlColor() forma:

    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); }


No puede hacerlo con un CEdit simple, necesita anular algunos bits.

Implemente su propio controlador ON_WM_CTLCOLOR_REFLECT, luego devuelva su CBrush de color en el controlador:

(Más o menos, tendrá que poner la administración de recursos habitual allí, recuerde eliminar su pincel en el destructor)

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