MFC: cambiando el color de CEdit
-
03-07-2019 - |
Pregunta
Chicos, ¿puede alguien explicarme brevemente cómo cambiar el color de fondo de un control de 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.
Solución
No puedes hacerlo con un CEdit simple, necesitas anular algunos bits.
Implemente su propio controlador ON_WM_CTLCOLOR_REFLECT, luego devuelva su CBrush de color en el controlador:
(más o menos, deberá colocar la administración de recursos habitual allí, recuerde eliminar el 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);
}
}
Otros consejos
Esto también se puede hacer sin derivar de CEdit:
- Agregue
ON_WM_CTLCOLOR ()
al bloque de códigoBEGIN_MESSAGE_MAP ()
de su cuadro de diálogo. -
Agregue
OnCltColor ()
a su clase de diálogo:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
-
Implemente
OnCtlColor ()
así: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); }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow