MFC: modifica del colore di CEdit
-
03-07-2019 - |
Domanda
Ragazzi, qualcuno può darmi una breve panoramica su come cambiare il colore di sfondo di un controllo CEdit in fase di esecuzione? Voglio essere in grado di cambiare lo sfondo in rosso se il campo ha lunghezza zero e il bianco normale altrimenti.
Soluzione
Non puoi farlo con un semplice CEdit, devi sovrascrivere alcuni bit.
Implementa il tuo gestore ON_WM_CTLCOLOR_REFLECT, quindi restituisci il tuo CBrush colorato nel gestore:
(approssimativamente, dovrai inserire la solita gestione delle risorse, ricorda di eliminare il pennello nel distruttore)
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
Altri suggerimenti
Questo può essere fatto anche senza derivare da CEdit:
- Aggiungi
ON_WM_CTLCOLOR ()
al blocco di codiceBEGIN_MESSAGE_MAP ()
della tua finestra di dialogo. -
Aggiungi
OnCltColor ()
alla tua classe di dialogo:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
-
Implementa
OnCtlColor ()
in questo modo: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); }