Chicos, alguien puede darme un breve recorrido a través de cómo cambiar el color de fondo de un CEdit control en tiempo de ejecución? Quiero ser capaz de cambiar el fondo a rojo, si el campo es de longitud cero y el blanco normal, de lo contrario.

InformationsquelleAutor Konrad | 2008-10-20

2 Comentarios

  1. 7

    No puede hacerlo con un simple CEdit, usted necesita para reemplazar un par de bits.

    Implementar su propio ON_WM_CTLCOLOR_REFLECT controlador, a continuación, volver a su color CBrush en el controlador:

    (aproximadamente, tendrás que poner la costumbre de gestión de los recursos allí, rememebr para eliminar el pincel en el destructor)

    class CColorEdit : public CEdit
    {
      ....
      CBrush   m_brBkgnd;
      afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
      {
        m_brBkgnd.DeleteObject();
        m_brBkgnd.CreateSolidBrush(nCtlColor);
      }
    }
  2. 4

    Esto también se puede hacer sin derivar de CEdit:

    1. Agregar ON_WM_CTLCOLOR() a su cuadro de diálogo de la BEGIN_MESSAGE_MAP() bloque de código.
    2. Agregar OnCltColor() a la clase de diálogo:

      afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    3. Implementar OnCtlColor() así:

      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);
      }

Dejar respuesta

Please enter your comment!
Please enter your name here