Partilhar via


CWnd::OnCtlColor

A estrutura chama essa função de membro quando um controle filho está prestes a ser desenhada.

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

Parâmetros

  • pDC
    Contém um ponteiro para o contexto de exibição para a janela filho.Pode ser temporário.

  • pWnd
    Contém um ponteiro para o controle solicita que a cor.Pode ser temporário.

  • nCtlColor
    Contém um dos seguintes valores, especificando o tipo de controle:

    • Controle de botão deCTLCOLOR_BTN

    • Caixa de diálogo deCTLCOLOR_DLG

    • Controle de edição deCTLCOLOR_EDIT

    • Controle de caixa de listagem deCTLCOLOR_LISTBOX

    • A caixa de mensagem deCTLCOLOR_MSGBOX

    • Controle de barra de rolagem deCTLCOLOR_SCROLLBAR

    • Controle estático deCTLCOLOR_STATIC

Valor de retorno

OnCtlColor deve retornar uma alça ao pincel que deve ser usada pintando o controle em segundo plano.

Comentários

A maioria dos controles envia esta mensagem ao seu pai (geralmente uma caixa de diálogo) para preparar pDC para desenhar o controle usando as cores corretas.

Para alterar a cor do texto, chame a função de membro de SetTextColor com os valores vermelho, verde e azul, desejados (RGB).

Para alterar a cor do plano de fundo de um controle de edição de linha única, defina o identificador do pincel códigos na mensagem de CTLCOLOR_EDIT e de CTLCOLOR_MSGBOX , e chamar a função de CDC::SetBkColor em resposta ao código de CTLCOLOR_EDIT .

OnCtlColor não será chamado para a caixa de listagem de uma caixa de combinação drop-down porque a caixa de listagem suspensa é realmente um filho da caixa de combinação e não um filho da janela.Para alterar a cor da lista suspensa, crie CComboBox com uma substituição de OnCtlColor que verifica CTLCOLOR_LISTBOX no parâmetro de nCtlColor .Em o manipulador, a função de membro de SetBkColor deve ser usada para definir a cor do plano de fundo para o texto.

ObservaçãoObservação

Essa função de membro é chamada pela estrutura para permitir que seu aplicativo manipule uma mensagem do windows.Parâmetros passados à sua função refletem os parâmetros recebidos pela estrutura quando a mensagem foi colocada.Se você chamar a implementação da classe base de essa função, essa implementação usará parâmetros passados originalmente com a mensagem e não os parâmetros que você fornece para a função.Para adicione o seguinte método à sua classe da caixa de diálogo, use o painel de propriedades do Visual Studio para adicionar um manipulador de mensagem para WM_CTLCOLOR.Como alternativa, você pode adicionar manualmente uma entrada de ON_WM_CTLCOLOR () no mapa de mensagem.

Exemplo

// 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

Cabeçalho: afxwin.h

Consulte também

Referência

CWnd Class

Gráfico de hierarquia

CDC::SetBkColor