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çã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