模态框与非模态框
模态框与非模态框都是一种对话框,不同的是:
- 模态框打开后,若不关闭,不可对其父对话框进行操作
- 模态框打开后,若不关闭,可以对其父对话框进行操作
首先创建两个按钮用来打开着两个模态框,并给这两个按钮添加点击事件

1.模态框
1.1 添加对话框资源
右键资源=》添加=》资源=》选择Dialog=》创建
打开资源视图可以看到我们新建的对话框,在此我把ID重命名为IDD_MODAL

1.2 添加对话框类
右键对话框=》添加类,并且把两个复选框勾上

1.3 修改文件
创建好之后可以看到资源管理器中出现了CModal类
给CModal.h引入resource.h
如pch.h报错,可以删除pch.h
DECLARE_DISPATCH_MAP(),DECLARE_INTERFACE_MAP()没吊用也可以删掉
1.4 添加打开事件
给一开始注册的按钮点击事件添加一下代码
同时要引入CModal.h的头文件
c++
#include "CModal.h"
void CMainDlg::OnBnClickedButton4()
{
CModal modal;
modal.DoModal();
}调用对话框的DoModal即可打开弹窗
打开后,若不关闭,对其父窗口进行操作,发现是不可操作的
2.非模态框
1.1 添加对话框资源
同样新增资源,添加对话框,在此我把非模态框ID命名为IDD_MODULAR

1.2 添加对话框类

1.3 修改文件
创建好之后可以看到资源管理器中出现了CModular类
给CModal.h引入resource.h
如pch.h报错,可以删除pch.h
DECLARE_DISPATCH_MAP(),DECLARE_INTERFACE_MAP()没吊用也可以删掉
1.4 创建对话框
在父对话框中引入该非模态框头文件,并创建一个变量
在父对话框的cpp文件中,构造函数中使用Create创建模态框控件,在按钮点击方法中使用ShowWindow显示窗口
c++
#pragma once
#include "CModular.h"
class CMFCMODALDlg : public CDialogEx
{
public:
CMFCMODALDlg(CWnd* pParent = nullptr); // 标准构造函数
CModular modular;
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
};c++
#include "CModular.h"
CMFCMODALDlg::CMFCMODALDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFC_MODAL_DIALOG, pParent)
{
modular.Create(IDD_MODULAR);
}
void CMFCMODALDlg::OnBnClickedButton2()
{
modular.ShowWindow(SW_SHOW);
}