第4节  窗口颜色控制

更新于 2026年10月10日 版权声明
第4节 窗口颜色控制

父窗口和控件子窗口的颜色控制,主要有以下3种方法。

1)调用CWinApp::SetDialogBkColor函数,设置对话框背景颜色和静态文本颜色。

2)WM_ERASEBKGND的消息映射函数颜色控制的对象,只包括父窗口自身的背景和文字颜色。

3)WM_CTLCOLOR的消息映射函数颜色控制的对象,不但包括父窗口自身的背景和文字颜色,而且还包括静态文本控件、编辑控件以及组合控件等。

打开本章第3节的“Si”工程,本节将继续演示使用一些简单的对话框及控件的颜色控制。

1)修改进程启动时的回调函数InitInstance的代码。

图示

2)编译并运行,测试代码,如图10-17所示。

图示

图10-17 查看运行结果

CWinApp::SetDialogBkColor函数的颜色控制的对象,只包括对话框背景颜色和静态文本控件的文字颜色。其他类型控件(包括编辑框和按钮等),都不在它的管理范围内。

3)在主对话框中,添加WM_ERASEBKGND的消息映射函数OnEraseBkgnd,如图10-18所示。

图示

图10-18 添加WM_ERASEBKGND消息映射函数

4)修改OnEraseBkgnd函数的代码。

图示

5)编译并运行,测试代码,如图10-19所示。

图示

图10-19 查看运行结果(https://www.daowen.com)

WM_ERASEBKGND的消息映射函数颜色控制的对象,只包括父窗口自身的背景和文字颜色。任何控件子窗口,包括静态文本控件等都不在它的控制范围内。

6)添加WM_CTLCOLOR的消息映射函数OnCtlColor,并修改代码。

图示

7)编译并运行,测试代码,如图10-20所示。

所有静态文本控件、编辑框以及组合控件,背景颜色都更新为蓝色,文字颜色也更新为绿色。只有对话框背景还是受OnEraseBkgnd函数控制,仍然还是青色。另外,按钮和列表控件等高级控件不受OnCtlColor函数控制保持原有颜色。

图示

图10-20 查看运行结果

8)再次修改OnCtlColor函数的代码。

图示

图示

9)修改OnEraseBkgnd函数代码为默认处理,或者删除OnEraseBkgnd函数。

图示

图示

10)编译并运行,测试代码,如图10-21所示。

图示

图10-21 查看运行结果

WM_CTLCOLOR的消息映射函数颜色控制的对象,不但包括父窗口自身的背景和文字颜色,而且还包括静态文本控件、编辑控件以及组合框内部的列表框等。根据OnCtlColor函数的第二个参数,还可以区分不同控件或者窗口,设定不同的背景颜色和文字颜色。颜色控制消息的不足之处是,只能控制比较基础的控件,对于大部分控件还是不能控制(例如,按钮、列表控件等不能控制)。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)