首页 理论教育窗口颜色控制方法总结

窗口颜色控制方法总结

【摘要】:父窗口和控件子窗口的颜色控制,主要有以下3种方法。2)WM_ERASEBKGND的消息映射函数颜色控制的对象,只包括父窗口自身的背景和文字颜色。打开本章第3节的“Si”工程,本节将继续演示使用一些简单的对话框及控件的颜色控制。图10-21 查看运行结果WM_CTLCOLOR的消息映射函数颜色控制的对象,不但包括父窗口自身的背景和文字颜色,而且还包括静态文本控件、编辑控件以及组合框内部的列表框等。

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

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

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

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

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

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

978-7-111-46378-8-Chapter10-33.jpg

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

978-7-111-46378-8-Chapter10-34.jpg

图10-17 查看运行结果

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

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

978-7-111-46378-8-Chapter10-35.jpg

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

4)修改OnEraseBkgnd函数的代码。

978-7-111-46378-8-Chapter10-36.jpg

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

978-7-111-46378-8-Chapter10-37.jpg

图10-19 查看运行结果(www.chuimin.cn)

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

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

978-7-111-46378-8-Chapter10-38.jpg

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

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

978-7-111-46378-8-Chapter10-39.jpg

图10-20 查看运行结果

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

978-7-111-46378-8-Chapter10-40.jpg

978-7-111-46378-8-Chapter10-41.jpg

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

978-7-111-46378-8-Chapter10-42.jpg

978-7-111-46378-8-Chapter10-43.jpg

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

978-7-111-46378-8-Chapter10-44.jpg

图10-21 查看运行结果

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