这篇文章主要介绍模态与非模态对话框的概念以及在MFC中如何去创建模态与非模态对话框:
- 概念:模态对话框又叫模式对话框,是指用户想要对对话框以外的应用程序或者其他对象进行操作时必须先响应该对话框,形象点就是"比较专一"的对话框.而非模态的对话框"比较花心",当用户打开非模态对话框时,也可以操作其他窗口.
- 创建:
-
首先根据向导建立一个基于对话框的MFC应用程序,在右侧工具箱中拖入两个Button(如果不知道的可以自行百度呀) 效果如下图:
2.打开资源视图,点开工程项目文件->点开.rc文件->点开Dilalog->右键Dialog插入Dialog.效果如下:
3.OK接下来就是一系列操作了(想改新增对话框的ID的右键对话框属性修改ID即可)
4.关键的一步,关联类变量,右键对话框->添加类->弹出MFC类向导->修改类名->完成
5.给按钮添加消息映射函数 右键按钮->添加事件处理程序->消息类型选择BN_CLICKED->类列表选择相应的主窗口类名称->编辑代码:
5.在函数体内实现点击按钮创建模态对话框代码如下:
void CdoModualTestDlg::OnBnClickedButtonModaldialog()
{
// TODO: 在此添加控件通知处理程序代码
Dialog md;
md.DoModal();
}
6.保存运行.点击按钮弹出模态对话框(此时只有点确定或者取消才会有响应).
创建非模态对话框也是按照以上的步骤,按钮的事件处理函数的代码如下:
例子使用的方式是用成员变量来创建非模态对话框(推荐使用这种方法创建)在类的构造中将指针初始化为空 最后记得要在类的析构中delete md所指向的内存:
private:
Dialog md;
void CdoModualTestDlg::OnBnClickedButtonModalessdialog()
{
// TODO: 在此添加控件通知处理程序代码
md = new Dialog;
md->Create(IDD_DIALOG1);//创建一个非模态对话框,可以理解为资源绑定
md->ShowWindow(SW_SHOWNORMAL); //显示
}
到此,模态和非模态对话框创建完毕.