MFC对话框编程1(模态与与非模态)

版权声明:归所有菜鸟所有 https://blog.csdn.net/weixin_41752475/article/details/89309035

MFC的对话框编程1
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。
1、 模态对话框(model dialog box)
在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送
2 、非模态对话框(modaless dialog box)
在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。
点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。

在资源试图的Dialog中选取控件Button
1、插入两个新的Dialog,右键属性改ID名.2、对新的Dialog添加类
在这里插入图片描述
3、在Dialog窗口的Button按键添加事件处理(三种方法都可以添加)
3.1双击控件,对于按钮这种直接双击只能创建一种事件处理
3.2对控件右击在这里插入图片描述
3、在属性选择
在这里插入图片描述
在这里插入图片描述
4、进行模态非模态关联
4.1模态对话框
在原先Dlg.cpp添加模态对话框的.h文件

   #include" C模态.h"

void CMFC4151Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//模态
	CDlg_exec dlg;
	dlg.DoModal();
	//非模态
	//CDlg_exec dlg;
	//dlg.Create(IDD_exec);
	//dlg.ShowWindow(SW_SHOWNORMAL);
}

2、非模态
1) 见上,一样。但是出现窗口一闪而过

void CMFC4151Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//模态
	//CDlg_exec dlg;
	//dlg.DoModal();
	//非模态
	CDlg_exec dlg;
	dlg.Create(IDD_exec);//IDD_exec为模态或者非模态窗口ID
	dlg.ShowWindow(SW_SHOWNORMAL);
}

showWindow()参数选择在这里插入图片描述

2)在 主Dlg.h,添加

`#include "CDlg_exec.h"`

加上

private:
	CDlg_exec dlg;

这样的非模态不闪,但是第二次点击回报错
3)在2)的基础上再改动

在 主Dlg.app的OnInitDialog()添加

// TODO: 在此添加额外的初始化代码
	dlg.Create(IDD_exec);

这样在事件处理中

void CMFC4151Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//模态
	//CDlg_exec dlg;
	//dlg.DoModal();
	//非模态
	//CDlg_exec dlg;
	//dlg.Create(IDD_exec);//IDD_exec为模态或者非模态窗口ID
	dlg.ShowWindow(SW_SHOWNORMAL);
}

猜你喜欢

转载自blog.csdn.net/weixin_41752475/article/details/89309035