CWnd::OnCtlColor
当将绘制时,框架调用该成员函数的子控件。
afx_msg HBRUSH OnCtlColor(
CDC* pDC,
CWnd* pWnd,
UINT nCtlColor
);
参数
pDC
包含指针到子窗口中显示上下文。 是瞬态的。pWnd
包含指向该控件将请求颜色。 是瞬态的。nCtlColor
包含下列值之一,指定控件的类型:CTLCOLOR_BTN 按钮控件
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑控件
CTLCOLOR_LISTBOX 列表框控件
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滚动条控件
CTLCOLOR_STATIC 静态控件
返回值
OnCtlColor 必须将处理返回给将用于绘制控件背景使用的画笔。
备注
大多数控件发送此消息给其父(通常对话框) pDC 用于绘制控件准备使用正确的颜色。
若要更改文本的颜色,请调用和所需,红色、绿色和蓝色(rgb)值的 SetTextColor 成员函数。
若要更改背景色的单行编辑控件,将 CTLCOLOR_EDIT 和 CTLCOLOR_MSGBOX 消息的画笔处理代码,并调用 CDC::SetBkColor 函数以响应 CTLCOLOR_EDIT 代码。
因为下拉式列表框实际上是组合框的子级窗口中而不是子级,OnCtlColor 不会为一个下拉组合框中的列表框调用。 若要更改颜色的下拉式列表框,请检查在 nCtlColor 参数的 CTLCOLOR_LISTBOXOnCtlColor 的重写创建 CComboBox。 该处理程序,必须使用 SetBkColor 成员函数将文本的背景色。
备注
此成员函数由框架调用提供您的应用程序处理Windows消息。当接收消息,参数传递给函数以反映结构接收的参数。如果调用此函数的基类实现,该实现将使用参数最初用消息您提供给函数而非参数。若要将下面的方法添加到您的对话框选件类,请使用Visual Studio的属性窗格添加WM_CTLCOLOR的消息处理程序。或者,也可以手动添加ON_WM_CTLCOLOR() 项到消息映射。
示例
// 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;
}
要求
Header: afxwin.h