求用OnCtlColor函数实现图示功能代码 本帖最后由 wo449305245 于 2010-11-22 12:31:37 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dc.TextOut(x,y,"该图片仅限百度用户交流使用"); CWnd::OnCtlColorafx_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消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。 HBRUSH hBrush2=CreateSolidBrush(RGB(233,233,220));HBRUSH CTestHartDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor==CTLCOLOR_STATIC) { if(IDC_STATIC_MANUF!=pWnd->GetDlgCtrlID()){ pDC->SetBkColor(RGB(233,233,220)); return hBrush2; } } else if(nCtlColor==CTLCOLOR_DLG) { pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(233,233,220)); return hBrush2; } return hbr;} 如何让MainFrame程序能打开doc文件? ListBox 与 CListCtrl 使用 MFC软件的发布 状态栏添加按钮的问题 在单文档中写套接字问题 跪求一个远程监控程序!!! bitmap.LoadBitmap(nIDResource);后,我想知道位图被放在哪儿了,因为我想对存放在内存中的位图进行修改。 谁能提供一个好的音频转换工具呀,有分的 求教:用Socket怎样获取网卡的IP数据包。 求大神教MFC做线性表, 求助,如何给tab控件加上背景图片? 菜单自动被禁用 效果就是使用了enable(0)的那种效果
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消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。
HBRUSH CTestHartDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{
if(IDC_STATIC_MANUF!=pWnd->GetDlgCtrlID()){
pDC->SetBkColor(RGB(233,233,220));
return hBrush2;
}
}
else if(nCtlColor==CTLCOLOR_DLG)
{
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(233,233,220));
return hBrush2;
} return hbr;
}