模式对话框与非模式对话框

2015/06/06 MFC学习

模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口。例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。

1.创建一个基于对话框的应用程序;

2.创建一个新的对话框:

同时修改对话框的ID为IDD_MY_DIALOG,为该对话框添加类 在该对话框上右击:

3.在原来自带的对话框ModelssDialogDlg类,也就是主对话框类中添加变量:

并在头文件ModelessDialogDlg.h 中添加

#include "MyDialog.h"

4.在ModelessDialogDlg.cpp中的构造函数初始化:

CModelessDialogDlg::CModelessDialogDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CModelessDialogDlg::IDD, pParent)
	, m_pMyDialog(NULL)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pMyDialog = NULL;    //初始化新建对话框
}

并添加析构函数:

CModelessDialogDlg::~CModelessDialogDlg(){
	if(m_pMyDialog != NULL){
		delete m_pMyDialog;
	}
}

5.在主窗口中添加按钮,双击添加处理函数:

void CModelessDialogDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//如果是第一次显示,则先创建
	if(m_pMyDialog == NULL)
	{
		m_pMyDialog = new CMyDialog();
		m_pMyDialog->Create(IDD_MY_DIALOG);
	}
	m_pMyDialog->ShowWindow(SW_NORMAL);

}

程序运行结果:

Search

    Post Directory