文章目录
-
-
- 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
按钮,单击其中一个按钮可对其命名。

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