首页 > 其他分享 >如何更改CPropertySheet的背景色?

如何更改CPropertySheet的背景色?

时间:2022-12-07 21:58:39浏览次数:42  
标签:BLUE CPropertySheet return 更改 lpDrawItemStruct 背景色 rectClient pDC

//从我的新浪博客搬过来

如何更改CPropertySheet的背景色? 当然这里指的是包括改CPropertyPage和标签的背景颜色.

  (1)改CPropertyPage的背景色: 1)创建一个CPropertyPage的子类: class COwnerDrawPropPage : public CPropertyPage; 2)处理它的WM_ERASEBKGND 和 WM_CTLCOLOR消息: BOOL COwnerDrawPropPage::OnEraseBkgnd(CDC* pDC) {     CRect rectClient(0,0,0,0);     GetClientRect(&rectClient);     CBrush brush;     brush.CreateSolidBrush(BACKCOLOR_BLUE);     pDC->FillRect( &rectClient, &brush);     return TRUE;     //return CPropertyPage::OnEraseBkgnd(pDC); }   HBRUSH COwnerDrawPropPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {     //    HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);     //    return hbr;       pDC->SetBkColor(BACKCOLOR_BLUE);     pDC->SetBkMode(TRANSPARENT);     HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE);     return hbrushBack;       }     3)把所有属性页的父类都改为COwnerDrawPropPage.这样就改了属性页的颜色.   (2)改CPropertySheet的背景色, 这里包括两方面: 客户区的颜色, 标签的颜色. 1)改客户区的颜色跟改属性页的一样:   HBRUSH CMyPropertySheet::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { //    HBRUSH hbr = CPropertySheet::OnCtlColor(pDC, pWnd, nCtlColor); //    return hbr;     pDC->SetBkColor(BACKCOLOR_BLUE);     pDC->SetBkMode(TRANSPARENT);     HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE);     return hbrushBack;     } BOOL CMyPropertySheet::OnEraseBkgnd(CDC* pDC) {     CRect rectClient(0,0,0,0);     GetClientRect(&rectClient);     CBrush brush;     brush.CreateSolidBrush(BACKCOLOR_BLUE);     pDC->FillRect( &rectClient, &brush);     return TRUE;     //return CPropertySheet::OnEraseBkgnd(pDC); }   2)改标签的就有一定难度了. 先从CTabCtrl派生一个COwnerDrawTabCtrl, 处理其WM_ERASEBKGND消息. 然后再实现其DrawItem方法,注意不是WM_DRAWITEM!! 而是 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) .   BOOL COwnerDrawTabCtrl::OnEraseBkgnd(CDC* pDC) {     CRect rectClient(0,0,0,0);     GetClientRect(&rectClient);     pDC->FillRect( &rectClient, &m_brushBK);     return TRUE;     //return CTabCtrl::OnEraseBkgnd(pDC); } void COwnerDrawTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {       TCHAR szTabText[64]={0};       TC_ITEM     tci;     tci.mask        = TCIF_TEXT;     tci.pszText     = szTabText;     tci.cchTextMax  = sizeof(szTabText)-1;       GetItem( lpDrawItemStruct->itemID, &tci);     CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);         pDC->FillRect( &lpDrawItemStruct->rcItem, &m_brushBK);     pDC->SetBkColor( BACKCOLOR_BLUE);       if ((lpDrawItemStruct->itemState & ODS_SELECTED) &&          (lpDrawItemStruct->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))     {         //Make the color of text of the selected tab to be BLUE.         pDC->SetTextColor(RGB( 17, 139, 1));     }     //! 文字的位置可能的偏移     pDC->TextOut(lpDrawItemStruct->rcItem.left+4,         lpDrawItemStruct->rcItem.top+4,         tci.pszText,         lstrlen(tci.pszText));      } 现在, 万里长征就已经完成了一大截了,最后一步是为CMyPropertySheet 加入一个  COwnerDrawTabCtrl 成员变量, 然后在OnInitDialog() 加入子类化代码:   BOOL CMyPropertySheet::OnInitDialog()  {     BOOL bResult = CPropertySheet::OnInitDialog();     //! 省略原有代码       //! Jasmine 2011-11-08     m_tabOwnerDraw.SubclassWindow( GetTabControl()->m_hWnd);     m_tabOwnerDraw.ModifyStyle(0,TCS_OWNERDRAWFIXED);     return bResult; } 这样就把用CPropertySheet和CPropertyPage实现的属性框的背景颜色改好.  Have a good time!    
 

标签:BLUE,CPropertySheet,return,更改,lpDrawItemStruct,背景色,rectClient,pDC
From: https://www.cnblogs.com/wsk3q/p/16964646.html

相关文章

  • Debian11.5 最小化安装后更改主机名、安装桌面、设置默认语言、时区、静态IP、局域网D
    最小化安装,指的是采用debian-11.5.0-amd64-netinst.iso382.0MiB2022-09-1020:40这个只有382M的镜像,仅安装了ssh服务的状态,只占了900多M磁盘空间。如果使用Live......
  • 用C#发送post请求,实现更改直播间标题[简单随笔]
    第一次发这样的网络数据包。记录一下。API参考https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/live/manage.md做了很多尝试才成功,遇到最大的困......
  • 【原创】Databricks 更改hive metastore version
    在DatabricksRuntime7.0及更高版本上,Hive1.2.0和1.2.1不是内置的元存储。如果要将Hive1.2.0或1.2.1与DatabricksRuntime7.0及更高版本一起使用,请按照[下......
  • webflux延迟队列逻辑更改过程记录
    title:webflux延迟队列逻辑更改过程记录author:simonLeedate:2022/11/2210:26目录webflux延迟队列逻辑更改过程记录一、问题背景二、当前实现代码三、逻辑详解3......
  • 关于双系统更改盘符增删系统相关知识一箩筐
    每次操作双系统,总会被各种技术分区等为难一顿,从很久就想搞清楚,这次正好有机会,把查找的资料和实际的操作记录下来。BIOSlegacy简介BasicInputOutputSystem--基本输入......
  • Vue中优雅的更改iframe嵌入页面的样式
    通过外部引入css文件来控制嵌入页面的样式公共iframe组件封装传入属性:嵌入页面路径css文件名称(默认放在/static/css/下),默认css文件名可以自己定义,在确定嵌入页面不多,相......
  • QT点击按钮改变背景色
    1.需求描述:有一组按钮,每次只能让一个按钮有效,点击该按钮,让该按钮的setEnabled设为false,其他的设为true有一组按钮,鼠标点击按钮,该按钮改变背景色,例如变成绿色,而其他按钮不变......
  • Oracle数据库体系结构更改数据库的归档模式
    重做日志文件负责实例失败时的数据恢复,因为SGA中没有被保存的数据会全部丢失,使用重做日志文件就可以完全恢复事务。而归档日志进程用于介质恢复,比如磁盘损坏时,可以使用之前......
  • Notion导出批量更改脚本
    0.缘起问就是和Notion分手后的阵痛导出会有很多乱码,我忍受了一段时间终于忍不了了,掏出学了一点点的python,写了个脚本。该脚本就是检测到当前文件OR文件夹名称中含有.,......
  • google浏览器被2345地址更改
    在Windows启动后,点击“开始”→“运行”或者快捷菜单“window+R”,在“打开(0)”栏中键入regedit,然后按“确定”键,如下图:依次展开注册表到“HKEY_CURRENT_USER\SOFTWARE\M......