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.

Foi útil?

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:

  1. Adicionar ON_WM_CTLCOLOR() ao bloco de código BEGIN_MESSAGE_MAP() do seu diálogo.
  2. Adicionar OnCltColor() a sua classe de diálogo:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
  3. 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
scroll top