天天看点

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

文章目录

      • Model Dialog and Modeless Dialog
      • 在MFC项目中创建
        • 创建按钮
        • 创建窗口
        • 为按钮添加单击事件:弹出模态框
        • 为按钮添加单击事件:弹出非模态框
          • 1 Dig.h文件中
          • 2 Dig.cpp文件中
          • 3 单击事件函数中
          • 注意
        • 模态对话框创建使用DoModal(),非模态使用Create().

Model Dialog and Modeless Dialog

所谓模态对话框(Model Dialog )就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。

对于非模态对话框(Modeless Dialog),当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

在MFC项目中创建

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

工具箱(视图->工具箱)

创建按钮

打开 资源视图,在

Dialog

中有一个初始界面,通过 工具箱在其中插入两个

Button

按钮,单击其中一个按钮可对其命名。

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

创建窗口

右击资源视图中的

Dialog

文件夹,选择"插入Dialog(E)“即可。

右击创建好的文件选择"属性"可对其进行编辑。

选中创建好的窗口,右击,选择"添加类”,可创建一个于该窗口关联的类,取类名为

CFirst

为按钮添加单击事件:弹出模态框

双击创建好的

Button

按钮(或者右击按钮后点击"添加事件处理程序"),可添加单击事件。在准备添加单击事件的当前文件中引入头文件"

CFirst.h

",即可在单击事件代码体中使用

CFirst

创建对象,调用对象的

DoModal

即:当点击该

Button

时,弹出模态框。

void CMFCApplication3Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码 
	First f;
	f.DoModal();//模态框的弹出调用DoModal方法
	
}
           

为按钮添加单击事件:弹出非模态框

1 Dig.h文件中

以同样的方式创建一个新的窗口并与类

CSecond

关联。在

Dig.h

文件(即按钮所属的

.cpp

文件的头文件)的类中定义一个私有成员

CSecond

(需要引入头文件

#include"CSecond.h"

)

2 Dig.cpp文件中

Dig.cpp

(即按钮所属的.cpp文件)的

OnInitDialog

方法的

// TODO: 在此添加额外的初始化代码

处创建窗口:

// TODO: 在此添加额外的初始化代码
	s.Create(IDD_DIALOG2);//在这里创建
           
3 单击事件函数中

即可在对应

Button

单击事件函数中使用

ShowWindow

方法显示该非模态框。

注意

1.非模态框不能在单击事件函数中直接定义,因为非模态框不能阻塞程序(模态框可以),在单击事件函数中直接定义的

CSecond s;

对象将在函数结束后被立即销毁。

2.非模态框不能在单击事件函数中直接创建,如果在单击事件函数中直接创建,重复调用该函数(即多次点击对应

Button

时),将会由于多次创建而使程序崩溃,所以应该在初始化过程

OnInitDialog

中创建。

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

继续阅读