模态对话框与非模态对话框的区别
最近几天一直在研究这个问题,起初一直都是在用模态对话框,然而在一个对话框中打开另外一个模态对话框时,一直都无法将值传递给该模态对话框,今天早上将模态对话框改成了非模态对话框,问题竟然解决了。于是决定将它们之间的区别写下来。
首先来说说模态对话框,模态对话框是对话框中最常见的,使用范围很广泛,如果是模态的,那么弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。其用法为:
CMyDlg dlg;
dlg.DoModal(); //此处的DoModal()函数实现的功能是创建并显示对话框
接下来说说非模态对话框,非模态的就是直接显示出来,然后原来的程序继续执行下面的语句,而且其它窗口也呈可用状态。其用法如下:
CMyDlg dlg;
dlg.Create(IDD_XX); //其中IDD_XX为该非模态对话框的ID
dlg.ShowWindow(SW_SHOW);
网上常见的创建非模态对话框的方法如下:
/*假设IDD_TEST_DLG为已经定义的对话框资源的ID号*/
CTestDlg *dlg=new CTestDlg;
dlg-> Create(IDD_TEST_DLG,NULL);
dlg-> ShowWindows(SW_SHOW);
在上面的代码中我们新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。那么这就提出了一个问题:什么时候销毁该对象。可以用如下方法:
在对话框退出时销毁自己:在对话框中重载OnOK与OnCancel在函数中调用父类的同名函数,然后调用DestroyWindow()强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用delete this;强行删除自身对象。相关代码如下:
void CTestDlg1::OnOK()
{
CDialog::OnOK();
DestroyWindow();
}
void CTestDlg1::OnCancel()
{
CDialog::OnCancel();
DestroyWindow();
}
void CTestDlg1::OnDestroy()
{
CDialog::OnDestroy();
delete this;
}
可是我用这种方法动态分配地址,老是出问题,提示dlg定义出错,不知道问题在哪?
模态对话框与非模态对话框的区别相关推荐
- 模态对话框和非模态对话框的区别
模态对话框和非模态对话框的区别 假设对话框类名为:CTestDlg 1,如果是模态对话框: CTestDlg ctd;//创建该对话框对像 ctd.DoModale(); 2,如果是非模态的: C ...
- PyQt5 模态对话框与非模态对话框的区别
模态对话框与非模态对话框的区别 记录博文 一.模态对话框 应用程序模态对话框:一旦调用该对话框,它就会成为应用程序唯一能够与用户进行交互的部件.在关闭该对话框之前,用户都不能使用应用程序的其他部件.当 ...
- 模态对话框 和 非模态对话框的区别
模态对话框 出现模态对话框时,主窗口或其他这个程序的窗口将无法进行操作,要等到模态对话框退出才可以操作这个程序的其他窗口. (确保一对一进行反馈) 例如:每次关闭程序时都会弹出的窗口:"1. ...
- c#中的模态对话框和非模态对话框
模态对话框 弹出窗口阻止调用窗口的所有消息响应. 只有在弹出窗口结束后调用窗口才能继续. 在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 非模态 ...
- 模态对话框和非模态对话框的消息循环分析
1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...
- Qt中的模态对话框和非模态对话框
模态对话框及非模态对话框(详情见课本P51). 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭. 非模态对话框:当被打开时,用户既可选择和该对话框进行交互, ...
- 简记模态对话框和非模态对话框
模态对话框和非模态对话框的区别 模态对话框会阻止与其它窗口的交互,而非模态对话框不会.即模态对话框显示的时候,不能操作其它窗口,要想操作其它窗口,必须关闭该模态对话框:非模态对话框显示的时候,可以对其 ...
- vc++开发学习二(模态对话框和非模态对话框的创建和销毁)
①.模态对话框与非模态对话框的区别: 模态对话框:一旦创建模态对话框,则无法操作父对话框,只能操作当前创建的模态对话框,关闭当前模态对话框后才可以操作父对话框非模态对话框:和模态对话框相反,创建该对话 ...
- MFC应用模态对话框和非模态对话框
关于对话框呢 第一个了解的就是模态对话框和非模态对话框 定义的话: 1.模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作. 2.非模态对话框 ...
最新文章
- 表贴3.3V稳压芯片 PL3500测试 低压差线性稳压器
- yii 全选 php,Yii2.0实现的批量更新及批量插入功能示例
- 信息系统服务器备机,医院信息系统业务连续性讨论:双机热备、RAC还是x86一体机?...
- 织梦百度php主动推送代码示例,织梦百度php主动推送代码示例,亲试绝对成功!...
- 【2012百度之星/资格赛】E:C++ 与Java
- 自动化测试用java还是python_现在自动化测试用Java好还是Python好?
- docker --- 镜像、容器
- Decorator(装饰)--对象结构型模式
- html 表单优化,用CSS3优化HTML5表单的步奏
- 组合数学基本工具-- 排列与组合以及简单公式
- github上完成个人的站点搭建
- Flash网页游戏辅助工具制作简析
- c++早绑定和晚绑定
- 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
- [COGS755]山海经
- AIOps案例: 阿里巴巴的智能监控系统
- 工控安全PLC固件逆向一
- MySQL数据库实现主主同步
- find的用法(完整)
- 小黑T400 显卡驱动问题