(4)模态对话框于非模态对话框的创建

文章目录

Model Dialog and Modeless Dialog

所谓模态对话框(Model Dialog )就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
对于非模态对话框(Modeless Dialog),当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

在MFC项目中创建

资源视图 (解决方案资源管理器->资源文件->.rc文件)
工具箱(视图->工具箱)

创建按钮

打开 资源视图,在Dialog中有一个初始界面,通过 工具箱在其中插入两个Button按钮,单击其中一个按钮可对其命名。
(4)模态对话框于非模态对话框的创建

创建窗口

右击资源视图中的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中创建。

模态对话框创建使用DoModal(),非模态使用Create().

上一篇:Vue 自定义组件可同时通过属性、插槽设置内容的实施方案


下一篇:ElementUI el-dialog中打开一个新的el-dialog(Vue子组件定义变量的一个坑)