MFC: Ändern der Farbe von CEdit
-
03-07-2019 - |
Frage
Leute, kann mir jemand einen kurzen Lauf geben durch, wie die Hintergrundfarbe einer CEdit Steuerung zur Laufzeit ändern? Ich möchte den Hintergrund rot ändern können, wenn das Feld der Länge Null ist und die normale weiße sonst.
Lösung
Sie können es mit einem einfachen CEdit nicht tun, müssen Sie ein paar Bits außer Kraft zu setzen.
Implementieren Sie Ihren eigenen ON_WM_CTLCOLOR_REFLECT Handler, dann wieder Ihre farbige CBrush im Handler:
(grob, werden Sie das übliche Ressourcenmanagement in dort setzen müssen, rememebr Pinsel im Destruktor löschen)
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
Andere Tipps
Dies kann auch ohne Ableitung von CEdit erfolgen:
- Fügen Sie
ON_WM_CTLCOLOR()
zu Ihrem Dialog desBEGIN_MESSAGE_MAP()
Codeblock. -
In
OnCltColor()
auf Ihre Dialogklasse:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
-
Implement
OnCtlColor()
etwa so: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); }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow