最近几天一直在研究这个问题,起初一直都是在用模态对话框,然而在一个对话框中打开另外一个模态对话框时,一直都无法将值传递给该模态对话框,今天早上将模态对话框改成了非模态对话框,问题竟然解决了。于是决定将它们之间的区别写下来。

首先来说说模态对话框,模态对话框是对话框中最常见的,使用范围很广泛,如果是模态的,那么弹出后该程序的其它窗口就呈不可用的状态,原来程序暂停执行,直到这个模态窗口关闭后才回到原来程序继续。其用法为:
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定义出错,不知道问题在哪?

模态对话框与非模态对话框的区别相关推荐

  1. 模态对话框和非模态对话框的区别

    模态对话框和非模态对话框的区别 假设对话框类名为:CTestDlg  1,如果是模态对话框: CTestDlg ctd;//创建该对话框对像  ctd.DoModale(); 2,如果是非模态的: C ...

  2. PyQt5 模态对话框与非模态对话框的区别

    模态对话框与非模态对话框的区别 记录博文 一.模态对话框 应用程序模态对话框:一旦调用该对话框,它就会成为应用程序唯一能够与用户进行交互的部件.在关闭该对话框之前,用户都不能使用应用程序的其他部件.当 ...

  3. 模态对话框 和 非模态对话框的区别

    模态对话框 出现模态对话框时,主窗口或其他这个程序的窗口将无法进行操作,要等到模态对话框退出才可以操作这个程序的其他窗口. (确保一对一进行反馈) 例如:每次关闭程序时都会弹出的窗口:"1. ...

  4. c#中的模态对话框和非模态对话框

    模态对话框 弹出窗口阻止调用窗口的所有消息响应. 只有在弹出窗口结束后调用窗口才能继续. 在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 非模态 ...

  5. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  6. Qt中的模态对话框和非模态对话框

    模态对话框及非模态对话框(详情见课本P51). 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭. 非模态对话框:当被打开时,用户既可选择和该对话框进行交互, ...

  7. 简记模态对话框和非模态对话框

    模态对话框和非模态对话框的区别 模态对话框会阻止与其它窗口的交互,而非模态对话框不会.即模态对话框显示的时候,不能操作其它窗口,要想操作其它窗口,必须关闭该模态对话框:非模态对话框显示的时候,可以对其 ...

  8. vc++开发学习二(模态对话框和非模态对话框的创建和销毁)

    ①.模态对话框与非模态对话框的区别: 模态对话框:一旦创建模态对话框,则无法操作父对话框,只能操作当前创建的模态对话框,关闭当前模态对话框后才可以操作父对话框非模态对话框:和模态对话框相反,创建该对话 ...

  9. MFC应用模态对话框和非模态对话框

    关于对话框呢 第一个了解的就是模态对话框和非模态对话框 定义的话: 1.模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作. 2.非模态对话框 ...

最新文章

  1. 表贴3.3V稳压芯片 PL3500测试 低压差线性稳压器
  2. yii 全选 php,Yii2.0实现的批量更新及批量插入功能示例
  3. 信息系统服务器备机,医院信息系统业务连续性讨论:双机热备、RAC还是x86一体机?...
  4. 织梦百度php主动推送代码示例,织梦百度php主动推送代码示例,亲试绝对成功!...
  5. 【2012百度之星/资格赛】E:C++ 与Java
  6. 自动化测试用java还是python_现在自动化测试用Java好还是Python好?
  7. docker --- 镜像、容器
  8. Decorator(装饰)--对象结构型模式
  9. html 表单优化,用CSS3优化HTML5表单的步奏
  10. 组合数学基本工具-- 排列与组合以及简单公式
  11. github上完成个人的站点搭建
  12. Flash网页游戏辅助工具制作简析
  13. c++早绑定和晚绑定
  14. 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
  15. [COGS755]山海经
  16. AIOps案例: 阿里巴巴的智能监控系统
  17. 工控安全PLC固件逆向一
  18. MySQL数据库实现主主同步
  19. find的用法(完整)
  20. 小黑T400 显卡驱动问题

热门文章

  1. DataSet 读取Oracle 数据
  2. DI、IOC基础学习笔记
  3. 个人管理 - Learn More,Study Less!
  4. 欧洲与北美5G开战,最后的赢家却是高通?
  5. 在控制台打印半径为R的圆
  6. 2月第3周全球五大顶级域名总量净减6.1万个 降幅明显
  7. HUD 2544 最短路 迪杰斯特拉算法
  8. Win8系统搜索不到无线信号该怎么办?
  9. ArnetMiner – A Review
  10. 无法生成会话打印机,点打印提示没有选择的打印机