文章目录
Model Dialog and Modeless Dialog
所谓模态对话框(Model Dialog )就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
对于非模态对话框(Modeless Dialog),当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
在MFC项目中创建
资源视图 (解决方案资源管理器->资源文件->.rc文件)
工具箱(视图->工具箱)
创建按钮
打开 资源视图,在Dialog
中有一个初始界面,通过 工具箱在其中插入两个Button
按钮,单击其中一个按钮可对其命名。
创建窗口
右击资源视图中的Dialog
文件夹,选择"插入Dialog(E)“即可。
右击创建好的文件选择"属性"可对其进行编辑。
选中创建好的窗口,右击,选择"添加类”,可创建一个于该窗口关联的类,取类名为CFirst
为按钮添加单击事件:弹出模态框
双击创建好的Button
按钮(或者右击按钮后点击"添加事件处理程序"),可添加单击事件。在准备添加单击事件的当前文件中引入头文件"CFirst.h
",即可在单击事件代码体中使用CFirst
创建对象,调用对象的DoModal
即:当点击该Button
时,弹出模态框。
void CMFCApplication3Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
First f;
f.DoModal();//模态框的弹出调用DoModal方法
}
为按钮添加单击事件:弹出非模态框
1
以同样的方式创建一个新的窗口并与类CSecond
关联。在Dig.h
文件(即按钮所属的.cpp
文件的头文件)的类中定义一个私有成员CSecond
(需要引入头文件#include"CSecond.h"
)
private : CSecond s;
2
在Dig.cpp
(即按钮所属的.cpp文件)的OnInitDialog
方法的// TODO: 在此添加额外的初始化代码
处创建窗口:
// TODO: 在此添加额外的初始化代码
s.Create(IDD_DIALOG2);//在这里创建
3
即可在对应Button
单击事件函数中使用ShowWindow
方法显示该非模态框。
s.ShowWindow(SW_SHOWNORMAL);
注意
1.非模态框不能在单击事件函数中直接定义,因为非模态框不能阻塞程序(模态框可以),在单击事件函数中直接定义的CSecond s;
对象将在函数结束后被立即销毁。
2.非模态框不能在单击事件函数中直接创建,如果在单击事件函数中直接创建,重复调用该函数(即多次点击对应Button
时),将会由于多次创建而使程序崩溃,所以应该在初始化过程OnInitDialog
中创建。