模态对话框和非模态对话框--非原创 | 黑马网课笔记

模态对话框

当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。

1)通过工具箱在界面上放一个Button,双击此按钮即可跳转到按钮处理函数:

//按钮处理函数
void CDialogDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
}

2)资源视图 -> Dialog -> 右击 -> 插入 Dialog:

3)修改对话框ID

4)点击对话框模板 -> 右击 -> 添加类DlgExec

5)类视图中多了一个自定义类DlgExec

6)按钮处理函数创建对话框,以模态方式运行。
实现模态对话框的创建需要调用CDialog类的成员函数CDialog::DoModel,该函数的功能就是创建并显示一个对话框:
//启动模态对话框按钮

void CDialogDlg::OnBnClickedButton1()
{
	//需要包含头文件:#include "DlgExec.h"
	CDlgExec dlg;
	dlg.DoModal(); //以模态方式运行
}

非模态对话框

当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。

图形界面操作过程和模态对话框一样,只是,非模态对话框实现方式不一样,先创建(CDialog::Create)一次,然后再显示(CWnd::ShowWindow)。

1)主对话框.h类中声明对话框对象

2)创建对话框放在主对话框类的构造函数或OnCreate()函数,目的只创建一次对话框:

//主对话框构造函数
CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CDialogDlg::IDD, pParent)
{
    
    
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_dlg.Create(IDD_DIALOG_SHOW); //IDD_DIALOG_SHOW为对话框ID
}

3)按钮处理函数显示对话框:

//启动非模态对话框按钮
void CDialogDlg::OnBnClickedButton2()
{
    
    
	// TODO:  在此添加控件通知处理程序代码

	m_dlg.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
}

猜你喜欢

转载自blog.csdn.net/weixin_49035356/article/details/109613711