mfc:模态对话框和非模态对话框

  1. 在Dialog子项中插入Dialog
  2. 点击对话框属性,更ID,命名为IDD_EXECIDD_NONEXEC
    在这里插入图片描述
  3. 编辑对话框
    在这里插入图片描述
  4. 给对话框生成类:右键+添加类
    在这里插入图片描述
  5. 给主对话框的button创建事件处理

    方法1: 双击button,自动生成函数
    方法2: 属性——控件事件
    在这里插入图片描述
    方法3: 属性——添加事件处理程序
    在这里插入图片描述
  6. 编写模态对话框代码
    双击button跳转到按钮的函数体。
    先引入模态对话框的头文件CDlgExec.h
    然后在函数体敲代码
void CDialogenDlg::OnBnClickedButton1()
{
    
    
	// TODO: 在此添加控件通知处理程序代码
	
	//弹出模态对话框
	CDlgExec dlg;
	INT_PTR nRes;  //用来判断是否打开
	nRes = dlg.DoModal();  //DoModal 打开模态对话框
	if (nRes == IDCANCEL)
		return;
}

首先生成模态对话框对象,然后DoModal成员函数打开对话框
效果图:
在这里插入图片描述

模态框里的变量在模态框类的DoDataExchange里修改,比如(下拉框见下拉框文章)
在这里插入图片描述
在这里插入图片描述

  1. 编写非模板对话框代码
    双击非模态的button跳到函数体
    引入非模态对话框头文件CDlgNExec.h

//编写代码1

void CDialogenDlg::OnBnClickedButton2()
{
    
    
	// TODO: 在此添加控件通知处理程序代码
	CDlgNExec dlg;
	//创建窗口
	dlg.Create(IDD_NONEXEC);
	//显示窗口
	dlg.ShowWindow(SW_SHOWNORMAL);
}

效果就是非模态对话框一闪而过……因为模态对话框有阻塞,而这个执行之后马上就结束函数了。

//方法:写成成员函数
在主对话框header里,创建一个private的CDlgNExec对象。
在这里插入图片描述
然后函数体代码:

void CDialogenDlg::OnBnClickedButton2()
{
    
    
	// TODO: 在此添加控件通知处理程序代码
	//CDlgNExec dlg;
	//创建窗口
	dlg.Create(IDD_NONEXEC);
	//显示窗口
	dlg.ShowWindow(SW_SHOWNORMAL);	
}

效果:执行第一次阔以,执行第二次崩溃,因为Create调用了2次,而你只需要调用一次。

//方法:将Create函数写在此函数中
在这里插入图片描述
在这里插入图片描述
然后将函数体那个注释掉。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ZmJ6666/article/details/108895408
今日推荐