(4)MFC模态对话框于非模态对话框的创建

Model Dialog and Modeless Dialog

所谓模态对话框(Model Dialog )就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
对于非模态对话框(Modeless Dialog),当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

在MFC项目中创建

资源视图 (解决方案资源管理器->资源文件->.rc文件)
工具箱(视图->工具箱)

创建按钮

打开 资源视图,在Dialog中有一个初始界面,通过 工具箱在其中插入两个Button按钮,单击其中一个按钮可对其命名。
在这里插入图片描述

创建窗口

右击资源视图中的Dialog文件夹,选择"插入Dialog(E)“即可。
右击创建好的文件选择"属性"可对其进行编辑。
选中创建好的窗口,右击,选择"添加类”,可创建一个于该窗口关联的类,取类名为CFirst

为按钮添加单击事件:弹出模态框

双击创建好的Button按钮(或者右击按钮后点击"添加事件处理程序"),可添加单击事件。在准备添加单击事件的当前文件中引入头文件"CFirst.h",即可在单击事件代码体中使用CFirst创建对象,调用对象的DoModal即:当点击该Button时,弹出模态框。

void CMFCApplication3Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码 
	First f;
	f.DoModal();//模态框的弹出调用DoModal方法
	
}
为按钮添加单击事件:弹出非模态框
1 Dig.h文件中

以同样的方式创建一个新的窗口并与类CSecond关联。在Dig.h文件(即按钮所属的.cpp文件的头文件)的类中定义一个私有成员CSecond(需要引入头文件#include"CSecond.h")

private : CSecond s;
2 Dig.cpp文件中

Dig.cpp(即按钮所属的.cpp文件)的OnInitDialog方法的// TODO: 在此添加额外的初始化代码处创建窗口:

// TODO: 在此添加额外的初始化代码
	s.Create(IDD_DIALOG2);//在这里创建
3 单击事件函数中

即可在对应Button单击事件函数中使用ShowWindow方法显示该非模态框。

s.ShowWindow(SW_SHOWNORMAL);
注意

1.非模态框不能在单击事件函数中直接定义,因为非模态框不能阻塞程序(模态框可以),在单击事件函数中直接定义的CSecond s;对象将在函数结束后被立即销毁。
2.非模态框不能在单击事件函数中直接创建,如果在单击事件函数中直接创建,重复调用该函数(即多次点击对应Button时),将会由于多次创建而使程序崩溃,所以应该在初始化过程OnInitDialog中创建。

模态对话框创建使用DoModal(),非模态使用Create().
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值