MFC: Mudando a cor do CEdit
-
03-07-2019 - |
Pergunta
Pessoal, alguém pode me dar uma breve corrida através de como mudar a cor de um controle CEdit em tempo de execução de fundo? Eu quero ser capaz de mudar o fundo para vermelho se o campo é zero comprimento ea branca normal contrário.
Solução
Você não pode fazer isso com um CEdit simples, você precisará substituir alguns pedaços.
implementar seu próprio manipulador ON_WM_CTLCOLOR_REFLECT, em seguida, retornar o seu colorido CBrush no manipulador:
(aproximadamente, você precisa colocar a gestão de recursos de costume lá, rememebr excluir sua escova no destruidor)
class CColorEdit : public CEdit
{
....
CBrush m_brBkgnd;
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
m_brBkgnd.DeleteObject();
m_brBkgnd.CreateSolidBrush(nCtlColor);
}
}
Outras dicas
Isto pode também ser feito sem decorrente CEdit:
- Adicionar
ON_WM_CTLCOLOR()
ao bloco de códigoBEGIN_MESSAGE_MAP()
do seu diálogo. -
Adicionar
OnCltColor()
a sua classe de diálogo:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
-
Implementar
OnCtlColor()
assim: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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow