MFC: Changer la couleur de CEdit
-
03-07-2019 - |
Question
Les gars, quelqu'un peut-il me donner un bref aperçu de la façon de changer la couleur d'arrière-plan d'un contrôle CEdit au moment de l'exécution? Je veux pouvoir changer le fond en rouge si le champ a une longueur nulle et le blanc normal sinon.
La solution
Vous ne pouvez pas le faire avec un simple CEdit, vous devez remplacer quelques bits.
Implémentez votre propre gestionnaire ON_WM_CTLCOLOR_REFLECT, puis renvoyez votre CBrush coloré dans le gestionnaire:
(en gros, vous devrez y mettre la gestion habituelle des ressources, n'oubliez pas de supprimer votre pinceau dans le destructeur)
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
Autres conseils
Cela peut également être fait sans dériver de CEdit:
- Ajoutez
ON_WM_CTLCOLOR ()
au bloc de codeBEGIN_MESSAGE_MAP ()
de votre boîte de dialogue. -
Ajoutez
OnCltColor ()
à votre classe de dialogue:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
-
Implémentez
OnCtlColor ()
comme suit: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); }