⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.6.1 改变整个对话框及其上子控件的背景色.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
10.6.1 改变整个对话框及其上子控件的背景色
下面为 Graphic程序的设置对话框( CSettingDlg对象)捕获 WM CTLCOLOR消息,即添加该消息的响
应处理,该响应函数的默认代码如例 10-25所示。
例 10-25 

HBRUSH CSettingDlg : :OnCtlColor(CDC* pDC , 'CWnd* pWnd, UINT nCtlColor) 

{ HBRUSH hbr = CDialog : :OnCtlColor(pDC , pWnd, nCtlColor) ;
 // TODO : Change any attributes of the DC here 

// TODO : Return a different brush if the default is not desired
 return hbr; 
可以看到,在 OnCtlColor这个消息响应函数中,首先调用对话框基类: CDialog的 OnCtlColor函数,
返回一个画刷句柄 (hbr),然后该函数直接返回这个画刷句柄。之后,系统就会使用这个画刷句柄
来绘制对话框及其子控件的背景。如果想要改变对话框的背景色,只需要自定义一个画刷,然后让 
OnCtlColor函数返回这个画刷句柄即可。 
因此,首先为 CSetting Dl g类定义一个 CBrush类型的私有成员变量: m_brush,井在其构造函数
中利用 CreateSolidBrush函数将该画刷初始化为一个蓝色的画刷,初始化代码为: 
m_brush.CreateSolidBrush (RGB(O , O, 255)); 
然后,在 OnCtlColor响应函数返回时返回上述自定义的画刷: m_brush,即该函数的代码修改为如
例 10-26所示代码。
例 10-26 
HBRUSH CSettingDlg : :OnCtlColor(CDC* pDC , CWnd* pWnd , UINT nCtlColor)
 { 
HBRUSH hbr = CDialog: :OnCtlColor(pDC , pWnd , nCtlColor); 
// TODO : Change any attr工 butes of the DC here 
// TODO: Return a different brush if the default is not desired 
/ / return hbr ; 
return m_brush; 

Build并运行 Graphic程序,打开设置对话框,可以看到对话框和控件的背景都变成了蓝色(如图 
10.23所示)。这是因为在该对话框绘制时,会调用 OnCtlColor函数绘制整个对话框的背景,即用 m 
brush画刷来绘制对话框背景。当绘制其子控件时,也是调用这个 OnC t1Cólor函数,也是用 m brush
这个画刷来绘制背景的。因此,我们看到子控件和对话
框的背景都是蓝色。至于该对话框上两个按钮的背景为什么没有改变,稍后再介绍。 

图 10.23设置对话框及其子控件的背景色 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -