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.

[!NOTA]

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

Clase de CWnd

Gráfico de jerarquía

CDC::SetBkColor