如何更改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!

如何更改CPropertySheet的背景色相关推荐

  1. 如何更改图片的背景色(PS、证件照之星)

    如何更改图片的背景色(PS.证件照之星) 如何更改图片的背景色(PS.证件照之星) 1.1  证照之星教你如何给证件照换背景 证照之星教你如何给证件照换背景?这个问题困扰很多人,如果你不了解证照之星, ...

  2. iOS更改状态栏前景色背景色

    1.更改状态栏前景色: 首先在info.plist中View controller-based status bar appearance项设为no. [[UIApplication sharedAp ...

  3. div背景色更改 闪烁_HTML背景色教程–如何更改Div背景色,并通过代码示例进行了说明

    div背景色更改 闪烁 One of the most common things you may have to do as a web developer is to change the bac ...

  4. MFC更改对话框的背景色

    开发环境: win10 64 visual studio c++ 2013 MFC对话框的程序,背景色默认是灰色的,如下图所示: 想改成其它颜色的,如蓝色的,网上查了很多方法,试了其中的几种方法,发现 ...

  5. ps基础学习:更改证件照的背景色

    更改证件照片的背色有很多方法,本文采用魔棒工具和羽化工具. (1)从网上下载一张证件照,漂亮妹子一枚,将背景改为红色 (2) 选择魔棒工具,选中加选按钮,容差设置为70(可根据情况自行调整),勾选消除 ...

  6. 更改Chrome浏览器背景色,颜色自由设置

    一.下载插件Stylist.crx并安装至Chrome浏览器.如果出现不能识别的情况,就将Stylist.crx解压缩,在Chrome设置→扩展程序→加载已解压的扩展程序→选择解压的Stylist文件 ...

  7. 微信小程序自定义导航栏单独设置某些页面胶囊背景色,微信小程序setNavigationBarColor无效,微信小程序更改右上角按钮背景色

    前言 我们的小程序导航栏全局用的自定义导航,其中某两个页面的导航栏要有那种科技范儿,将导航栏背景设置成了透明背景,这样导航栏的背景色就跟着页面的背景走了,但是就是右上角的胶囊颜色不跟着变,用微信小程序 ...

  8. python的背景色怎么改_如何更改树的背景色

    我是来问你如何改变树影的背景的,我试过了ttk.Style().configure("Treeview", background="#383838") 只对牢房 ...

  9. ubuntu 14.04版本更改文件夹背景色为草绿色

    ENV:ubuntu 14.04 在这个版本上使用dconf 工具无法改变文件夹的背景了,下面介绍其他的方法,不需要dconf工具. 第一步: 在home目录下创建.themes文件夹 第二步 将/u ...

最新文章

  1. 第 3 次读 Effective Java,这 58 个技巧最值!
  2. COCOS学习笔记--Cocos引擎渲染流程
  3. TCP和UDP是否可以绑定同一端口进行通信
  4. php文件utf8编码转gbk编码格式,把phpwind utf8 转成 gbk 编码
  5. Exception in thread main java.time.format.DateTimeParseException: Text '31-Dec-13' could not be pa
  6. 使用图形界面Anaconda创建新环境的一个小问题
  7. opencv-api morphologyEx
  8. 让你少走弯路,这里有一份机器学习高效入门指南
  9. [HNOI2015] 亚瑟王
  10. Jquery获得服务器控件的方法
  11. 邮件安全风险评估方案
  12. 教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP
  13. 心理学 | (1)焦虑症和恐惧症--一种认知的观点
  14. 一个公务员工作七年后的肺腑之言”——给想考公务员的XDJM们看看,或许能有帮助
  15. 关于小米 角标不显示问题(只有第一次安装应用才会显示角标的问题解决方案)
  16. 一文带你了解 Flink Forward 柏林站全部重点内容
  17. 【BLE】CC2541之动态广播加密数据
  18. 【杂谈分享】world.execute(me); 用代码谱写从0到1的死亡情诗
  19. 2020.07 学习日记
  20. 优锘科技:企业架构管理平台荣获2021年度创新产品奖

热门文章

  1. c++ socket编程_C/C++中的Socket编程
  2. java 单引号的字符串类型_Java程序以字符串形式显示双引号和单引号
  3. mysql一对多分类_mysql一对多结果归类
  4. VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
  5. 结对开发石家庄地铁系统
  6. 数据仓库--基本概念
  7. 单引号内的双引号内的双引号怎么写
  8. VMware Workstation Pro 14.1.1 正式版
  9. 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
  10. TODO monkey笔记,PC端执行和手机端执行