首页 > 代码库 > VC OnCtlColor函数来修改控件背景颜色
VC OnCtlColor函数来修改控件背景颜色
CWnd::OnCtlColor afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); 返回值:OnCtlColor必须返回一个刷子句柄,该刷子将被用于画出控件的背景。 参数:
pDC 包含了子窗口的显示设备环境的指针。可能是临时的。 PWnd 包含了要求颜色的控件的指针。可能是临时的。 NCtlColor 包含了下列值,指定了控件的类型: · CTLCOLOR_BTN 按钮控件 · CTLCOLOR_DLG 对话框 · CTLCOLOR_EDIT 编辑控件 · CTLCOLOR_LISTBOX 列表框控件 · CTLCOLOR_MSGBOX 消息框 · CTLCOLOR_SCROLLBAR 滚动条控件 · CTLCOLOR_STATIC 静态控件 |
说明: 当要画出一个子控件时,框架就调用这个成员函数。多数控件将这个消息发送到它们的父窗口(通常是一个对话框),为使用正确的颜色画出控件而准备pDC。 要改变文本的颜色,使用要求的红、绿、蓝色值(RGB)调用SetTextColor成员函数。 要改变单行编辑控件的背景颜色,在CTLCOLOR_EDIT和CTLCOLOR_MSGBOX消息代码中设置刷子句柄,并在响应CTLCOLOR_EDIT的代码中调用CDC::SetBkColor函数。 不会为下拉组合框中的列表框调用OnCtlColor函数,因为下拉列表框实际上是组合框的子窗口,而不是窗口的子窗口。要改变下拉列表框的颜色,创建一个CcomboBox,在重载的OnCtlColor中的nCtlColor参数中检查CTLCOLOR_LISTBOX。在这个处理函数中,为设置文本的背景必须使用SetBkColor成员函数。 注意: 框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。
afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
参数nCtlColor用于指定控件的类型,可以是:
.CTLCOLOR_BTN 按钮控件 //(注意checkbox 属于button控件)
.CTLCOLOR_DLG 对话框
.CTLCOLOR_EDIT 编辑框
.CTLCOLOR_LISTBOX 列表控件
.CTLCOLOR_MSGBOX 消息控件
.CTLCOLOR_SCROLLBAR 滚动条控件
.CTLCOLOR_STATIC 静态控件
[程序实现]
假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd,UINT nCtlColor)
{
HBRUSHhbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(255,0,0)); //字体颜色
pDC->SetBkColor(RGB(0, 0,255)); //字体背景色
}
//TODO: Return a different brush if the default is not desired
returnhbr;
}
如果要指定某个特定控件可以这样写:ID为IDC_STATIC1
if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
{
pDC->SetTextColor(RGB(255,0,0)); //设置字体颜色
pDC->SetBkMode(TRANSPARENT);//设置字体背景为透明
// TODO:Return a different brush if the default is notdesired
return(HBRUSH)::GetStockObject(BLACK_BRUSH); // 设置背景色
}
else
return hbr;
3.改变背景颜色和文本颜色和字体:在OnCtlColor()添加代码:
if(pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)
{
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);//设置文本背景色为透明
pDC->SelectObject(&m_font);//设置字体
return m_brush;//设置控件背景颜色
}
//对于按钮来说上面的方法无效
3. 设置控件ID为IDC_SYSFONTSAMPLE的背景颜色与其背景图片一致方法如下:
if(pWnd->GetDlgCtrlID()==IDC_SYSFONTSAMPLE)
{
// 设置控件背景色与背景图片颜色一致
COLORREFbkColor = RGB(239,239,239); //背景图片的颜色值
pDC->SetBkColor(bkColor);
return(HBRUSH)::GetStockObject(NULL_BRUSH);
}
VC OnCtlColor函数来修改控件背景颜色