第6课:创建和使用控件
第7课:常用控件
概述:
在MFC中,控件是具有独立功能的人机交互的小窗口,它们除了可以使用自身成员外,还可使用其基类CWnd类的公有成员,因为几乎所有的控件类都是从CWnd类派生而来的。
正因为如此,当用控件类的Create创建控件时,除了自身的样式预定义标识外,还有窗口通用的样式预定义标识。
当对话框资源创建对话框类后,控件只能以成员的方式出现在对话框类中。
控件变量:
用MFC ClassWizard可为控件在对话框类中创建两种类别的成员变量:其一是控制类,即创建的是控件类对象;其二是数据类,即创建的是控件数据变量(我认为是控件变量)。这两种类别的成员在对话框类中只能各有一个。控件类对象可以引用控件类及其基类的公有成员,从而实现控件的操作;而数据类变量则是与控件绑定在一起,当使用UpdateData()时将控件上的数据存储到绑定的数据变量中,而当使用UpdateData(FALSE)则是将绑定的数据变量的数值回填到控件中。
消息:
不同控件的“通知消息”有所不同,总体可分为三类:其一是与界面相关的单击、选择与取消或展开与收缩等的命令消息;其二是与输入焦点相关的失去、得到等消息;其三是与数据相关的更新、改变等消息。这些消息,系统都会用一个称为MSG结构的系统变量来记录,并可用MFC ClassWizard对话框对其进行映射。
即控件不仅仅在对话框类中使用控件变量操作,还可通过控件的消息映射来实现代码功能。
美观:
MFC的控件更注重于控件的程序控制,而VB的控件更注重于控件的界面设计。
事实上,MFC的控件也可进行更深入的界面设计,包括两种层次不同的方法:其一是使用“自画”(Owner Draw,所有者绘制)体系;其二是跟踪消息。
对于“自画”体系,它可通过重载DrawItem函数来达到目的,但这种方法暂时较难。
跟踪消息是一个简单可行的方法。在前面的“调整对话框背景颜色”示例中,用到了WM_CTLCOLOR消息,这个消息是当对话框及控件等在显示之前向父窗口发生的消息,通过跟踪这个消息,在WM_CTLCOLOR消息函数OnCtrlColor返回之前,指定返回一个HBRUSH,系统就会用它绘制控件,从而改变控件的背景颜色。当然,也可在此函数中添加设置控件文本的颜色、格式等的代码,从而改变控件的外观。
彩蛋:
由上可知,在界面设计中,对话框是一种常用的模板,它包含了许多控件等界面元素。
实际上,在文档应用程序中,除了对话框外,还有菜单、工具栏和状态栏等界面模板,下一章将讨论这些模板。