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

请参见

参考

CWnd 类

层次结构图

CDC::SetBkColor