MFC模态与非模态

创建MFC 项目

新建项目-》 MFC应用-》应用程序类型为单个文档,项目样式选择MFC standard
或者应用程序类型选择基于对话框-》完成
在这里插入图片描述

资源视图

1:解决方案资源管理器-》资源文件-》找到.rc后缀的文件-》双击进去-》打开dialog文件夹-》IDD_MFC_03_DIALOG(点击这个)

在这里插入图片描述2:在工具栏下面的视图找到资源视图(vs2017版本的在视图-》其他窗口-》资源视图),点击就能打开,然后打开dialog文件夹-》IDD_MFC_03_DIALOG

修改属性

1:通过代码修改
2:在资源视图下右键,点击属性,然后就可修改对应的内容,回车可确认,例如caption 标题,把它改成了对话框
如果是控件的话,选中控件,右键点击属性,重复上面的操作
3:选中控件,直接敲,可改标题,回车确认
在这里插入图片描述
工具箱下面有可拖动的控件,如果工具箱关闭了,视图-》工具箱
在这里插入图片描述

关联对话框与事件

选中dialog文件夹,点击右键,插入dialog-》插入新的对话框
首先对话框控件需添加一个新的类,选中该对话框-》右键-》添加类
会自动添加头文件与源文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210219091150538.png?x-oss-process=image/watermark,type_Zm在这里插入图片描述
让按钮或其他关联到事件
1:选中该控件,右键,属性-》控件事件
2:选中该控件,右键-》添加事件处理程序
3:双击该控件,它默认的是点击事件

然后;

// TODO: 在此添加控件通知处理程序代码
CDlgMotai mdlg;    //CDlgMotai是那个模态对话框添加的类
mdlg.DoModal();   //当对话框处于活动状态时,该函数处理与用户的交互。这使得对话框是模态的
//使用户在关闭对话框之前不能与其它窗口交互。
//非模态对话框
void Cmfc03Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	CDeMotai demdlg;
	//创建
	demdlg.Create(IDD_DE_MOTAI); //把创建出来的对话框的ID号添加进去
	//显示
	demdlg.ShowWindow(SW_SHOWNORMAL);  //SW_SHOWNORMAL 激活并显示窗口。如果窗口是最小化或最大化的,则Windows恢复它原来的大小和位置。 
}

模态对话框有堵塞功能,非模态没有,这样写的话就会一闪而过,因为创建出来的是局部对象,作用域结束就会消失
解决方法:
写到成员函数里面(写到系统自动创建的mfcdlg的头文件下,记得加自己写的那个类的头文件)

private:
	CDeMotai demdlg;

这么写可以显示,变成了全局对象,对话框对象会一直存在
但是只会显示一次,第二次点击非模态对话框的时候就会出现bug,因为创建窗口只能创建一次,多次就会崩掉

所以只能让它初始化一次,在默认的mfcdlg文件夹下找到初始化函数Cmfc03Dlg::OnInitDialog(推荐用这个,在MFC里面,而不是构造函数)

// TODO: 在此添加额外的初始化代码

	demdlg.Create(IDD_DE_MOTAI); //把创建出来的对话框的ID号添加进去
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值