第1节 模式对话框和非模式对话框
对话框主要分为两个类型,即模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。例如,大部分软件的“关于…”对话框,都属于模式对话框。当非模式对话框弹出后,不影响对它的父窗口或者上一级窗口的操作。例如,QQ的聊天框或者编辑软件中的文字查找对话框等。
使用MFC应用程序向导,建立一个工程名为“Test”的基于对话框的工程,如图4-1所示。

图4-1 新建MFC工程
1)在资源视图中,MFC程序向导生成了一个主对话框模板,在其中添加2个按钮,如图4-2所示。

图4-2 为主对话框添加按钮控件
2)对照表4-1修改刚才添加的2个按钮的属性。
表4-1 对话框内的控件ID及属性

3)在资源视图中的Dialog资源上单击鼠标右键,在弹出的快捷菜单中,选择“Insert Dialog”命令,插入一个对话框,如图4-3所示。
4)修改对话框的ID、Caption属性和对话框的外观,然后随意添加一些控件,如图4-4所示。

图4-3 插入对话框资源用于测试模式对话框

图4-4 修改对话框的外观和属性
5)选中编辑好的对话框资源,执行View→ClassWizard命令,或按快捷键<Ctrl+W>打开类向导。(https://www.daowen.com)
类向导自动弹出创建新类的对话框,提示内容是“IDD_ABOUTDLG是一个新的对话框资源,需要创建一个与它关联的类”。选中“Create a new class”单选钮后,再单击“OK”按钮创建新对话框的关联类,如图4-5所示。

图4-5 为新插入的对话框资源建立关联类
6)填写类名“CAboutDlg”后单击“OK”按钮,完成对话框类的创建,如图4-6所示。
7)单击“OK”按钮关闭类向导,双击主对话框中的“关于”按钮建立消息映射函数,如图4-7所示。

图4-6 填写对话框类的名称

图4-7 建立按钮消息映射函数
8)编写OnAbout函数代码。

9)编译并运行,测试代码,如图4-8所示。

图4-8 查看运行结果
单击“关于”按钮弹出关于对话框,在关闭关于对话框前,主对话框是不可以操作的,这就是模式对话框的特点。