5.1对话框和控件的基本概念
5.1.1对话框的基本概念
对话框(Dialog)实际上是一个窗口.在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类.
对话框分为模态对话框和非模态对话框两种.大部分读者都会有这样的经历,当你通过File-Open命令打开一个文件对话框后,再用鼠标去选择菜单将只会发出嘟嘟声,这是因为文件对话框是一个模态对话框.模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息.我们平时所遇到的大部分对话框都是模态对话框。非模态对话框的典型例子是Windows95提供的写字板程序中的搜索对话框,搜索对话框不垄断用户的输入,打开搜索对话框后,仍可与其它用户界面对象进行交互,用户可以一边搜索,一边修改文章,这样就大大方便了使用.
本节主要介绍模态对话框,在第四节将介绍非模态对话框.
从MFC编程的角度来看,一个对话框由两部分组成:
对话框模板资源.对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框.
对话框类.对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能.
相应地,对话框的设计包括对话框模板的设计和对话框类的设计两个主要方面.
与对话框有关的消息主要包括WM_INITDIALOG消息和控件通知消息。在对话框创建时,会收到WM_INITDIALOG消息,对话框对该消息的处理函数是OnInitDialog 。
OnInitDialog的主要用处是初始化对话框。对话框的控件会向对话框发送控件通知消息,以表明控件的状态发生了变化。
5.1.2控件的基本概念
图5.1对话框中的控件
控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色.控件的种类较多,图5.1显示了对话框中的一些基本的控件.MFC的控件类封装了控件的功能,表5.1介绍了一些常用的控件及其对应的控件类.
表5.1
控件 功能 对应控件类 静态正文(Static Text) 显示正文,一般不能接受输入信息。 CStatic 图片(Picture) 显式位图、图标、方框和图元文件,一般不能接受输入信息. CStatic 编辑框(Edit Box) 输入并编辑正文,支持单行和多行编辑. CEdit 命令按钮(Pushbutton) 响应用户的输入,触发相应的事件. CButton 检查框(Check Box) 用作选择标记,可以有选中、不选中和不确定三种状态。 CButton 单选按钮(Radio Button) 用来从两个或多个选项中选中一项. CButton 组框(Group Box) 显示正文和方框,主要用来将相关的一些控件聚成一组. CButton 列表框(List Box) 显示一个列表,用户可以从该列表中选择一项或多项. CListBox 组合框(Combo Box) 是一个编辑框和一个列表框的组合.分为简易式、下拉式和下拉列表式. CComboBox 滚动条(Scroll Bar) 主要用来从一个预定义范围值中迅速而有效地选取一个整数值. CScrollBar控件实际上都是窗口,所有的控件类都是CWnd类的派生类.控件通常是作为对话框的子窗口而创建的,控件也可以出现在视窗口,工具条和状态条中.