Compartir a través de


CWnd::OnCtlColor

El marco de trabajo llama a esta función miembro a un control secundario está a punto de ser dibujado.

afx_msg HBRUSH OnCtlColor( 
   CDC* pDC, 
   CWnd* pWnd, 
   UINT nCtlColor  
);

Parámetros

  • pDC
    Contiene un puntero al contexto de presentación para la ventana secundaria. puede ser temporal.

  • pWnd
    Contiene un puntero al control que solicita el color. puede ser temporal.

  • nCtlColor
    Contiene uno de los valores siguientes, que especifica el tipo de control:

    • Control de botón deCTLCOLOR_BTN

    • Cuadro de diálogo deCTLCOLOR_DLG

    • Control de ediciónCTLCOLOR_EDIT

    • Control de cuadro de listaCTLCOLOR_LISTBOX

    • Cuadro de mensaje deCTLCOLOR_MSGBOX

    • Control de barra de desplazamiento deCTLCOLOR_SCROLLBAR

    • Control deCTLCOLOR_STATIC Static

Valor devuelto

OnCtlColor debe devolver un identificador al pincel que se debe utilizar para pintar el fondo del control.

Comentarios

La mayoría de los controles envía este mensaje a su elemento primario (normalmente un cuadro de diálogo) para preparar pDC para dibujar el control mediante colores correctos.

Para cambiar el color del texto, llame a la función miembro de SetTextColor con el color rojo deseado, el verde, y los valores azul (RGB).

Para cambiar el color de fondo de un control de edición de una línea, establecer el identificador del pincel en códigos de mensaje de CTLCOLOR_EDIT y de CTLCOLOR_MSGBOX , y llamar a la función de CDC:: SetBkColor en respuesta al código de CTLCOLOR_EDIT .

OnCtlColor no se invoca para el cuadro de lista del cuadro combinado desplegable porque el cuadro de lista desplegable es realmente un elemento secundario del cuadro combinado y no un elemento secundario de la ventana. Para cambiar el color del cuadro de lista desplegable, cree CComboBox con un reemplazo de OnCtlColor que comprobar si hay CTLCOLOR_LISTBOX en el parámetro de nCtlColor . En este controlador, la función miembro de SetBkColor utilizarse para establecer el color de fondo del texto.

NotaNota

Esta función miembro llaman el marco para que la aplicación pueda controlar un mensaje de Windows.Los parámetros pasados a la función reflejan los parámetros recibidos por el marco cuando el mensaje se recibió.Si llama a la implementación de la clase base de esta función, esa implementación utilizará los parámetros pasados originalmente con el mensaje y no los parámetros que se proporciona a la función.Para agregar el método siguiente a la clase de diálogo, utilice el panel de propiedades de Visual Studio para agregar un controlador de mensajes para WM_CTLCOLOR.Alternativamente, puede agregar manualmente una entrada de ON_WM_CTLCOLOR () al mapa de mensajes.

Ejemplo

// This OnCtlColor handler will change the color of a static control 
// with the ID of IDC_MYSTATIC. The code assumes that the CPenWidthsDlg 
// class has an initialized and created CBrush member named m_brush. 
// The control will be painted with red text and a background 
// color of m_brush.
HBRUSH CPenWidthsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may 
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use 
   // CWnd::GetDlgCtrlID() to perform the most efficient test. 
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent  
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

Requisitos

encabezado: afxwin.h

Vea también

Referencia

CWnd (clase)

Gráfico de jerarquías

CDC::SetBkColor