如何更改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的背景色相关推荐
- 如何更改图片的背景色(PS、证件照之星)
如何更改图片的背景色(PS.证件照之星) 如何更改图片的背景色(PS.证件照之星) 1.1 证照之星教你如何给证件照换背景 证照之星教你如何给证件照换背景?这个问题困扰很多人,如果你不了解证照之星, ...
- iOS更改状态栏前景色背景色
1.更改状态栏前景色: 首先在info.plist中View controller-based status bar appearance项设为no. [[UIApplication sharedAp ...
- div背景色更改 闪烁_HTML背景色教程–如何更改Div背景色,并通过代码示例进行了说明
div背景色更改 闪烁 One of the most common things you may have to do as a web developer is to change the bac ...
- MFC更改对话框的背景色
开发环境: win10 64 visual studio c++ 2013 MFC对话框的程序,背景色默认是灰色的,如下图所示: 想改成其它颜色的,如蓝色的,网上查了很多方法,试了其中的几种方法,发现 ...
- ps基础学习:更改证件照的背景色
更改证件照片的背色有很多方法,本文采用魔棒工具和羽化工具. (1)从网上下载一张证件照,漂亮妹子一枚,将背景改为红色 (2) 选择魔棒工具,选中加选按钮,容差设置为70(可根据情况自行调整),勾选消除 ...
- 更改Chrome浏览器背景色,颜色自由设置
一.下载插件Stylist.crx并安装至Chrome浏览器.如果出现不能识别的情况,就将Stylist.crx解压缩,在Chrome设置→扩展程序→加载已解压的扩展程序→选择解压的Stylist文件 ...
- 微信小程序自定义导航栏单独设置某些页面胶囊背景色,微信小程序setNavigationBarColor无效,微信小程序更改右上角按钮背景色
前言 我们的小程序导航栏全局用的自定义导航,其中某两个页面的导航栏要有那种科技范儿,将导航栏背景设置成了透明背景,这样导航栏的背景色就跟着页面的背景走了,但是就是右上角的胶囊颜色不跟着变,用微信小程序 ...
- python的背景色怎么改_如何更改树的背景色
我是来问你如何改变树影的背景的,我试过了ttk.Style().configure("Treeview", background="#383838") 只对牢房 ...
- ubuntu 14.04版本更改文件夹背景色为草绿色
ENV:ubuntu 14.04 在这个版本上使用dconf 工具无法改变文件夹的背景了,下面介绍其他的方法,不需要dconf工具. 第一步: 在home目录下创建.themes文件夹 第二步 将/u ...
最新文章
- 第 3 次读 Effective Java,这 58 个技巧最值!
- COCOS学习笔记--Cocos引擎渲染流程
- TCP和UDP是否可以绑定同一端口进行通信
- php文件utf8编码转gbk编码格式,把phpwind utf8 转成 gbk 编码
- Exception in thread main java.time.format.DateTimeParseException: Text '31-Dec-13' could not be pa
- 使用图形界面Anaconda创建新环境的一个小问题
- opencv-api morphologyEx
- 让你少走弯路,这里有一份机器学习高效入门指南
- [HNOI2015] 亚瑟王
- Jquery获得服务器控件的方法
- 邮件安全风险评估方案
- 教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP
- 心理学 | (1)焦虑症和恐惧症--一种认知的观点
- 一个公务员工作七年后的肺腑之言”——给想考公务员的XDJM们看看,或许能有帮助
- 关于小米 角标不显示问题(只有第一次安装应用才会显示角标的问题解决方案)
- 一文带你了解 Flink Forward 柏林站全部重点内容
- 【BLE】CC2541之动态广播加密数据
- 【杂谈分享】world.execute(me); 用代码谱写从0到1的死亡情诗
- 2020.07 学习日记
- 优锘科技:企业架构管理平台荣获2021年度创新产品奖
热门文章
- c++ socket编程_C/C++中的Socket编程
- java 单引号的字符串类型_Java程序以字符串形式显示双引号和单引号
- mysql一对多分类_mysql一对多结果归类
- VS中怎么新建Web服务器项目,VS中新建网站和新建WEB项目的区别
- 结对开发石家庄地铁系统
- 数据仓库--基本概念
- 单引号内的双引号内的双引号怎么写
- VMware Workstation Pro 14.1.1 正式版
- 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
- TODO monkey笔记,PC端执行和手机端执行