转载:https://blog.csdn.net/mpp_king/article/details/79707728                        https://www.cnblogs.com/xing901022/archive/2012/11/05/2755373.html

使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建有模式对话框的方法是调用CDialog::DoModal()。下面的代码演示了这种用法:

  1.  
    CYourView::OnOpenDlg()
  2.  
    {
  3.  
    CYourDlg dlg;
  4.  
    int iRet=dlg.DoModal();
  5.  
    }

CDialog::DoModal()的返回值为IDOK,IDCANCEL。表明操作者在对话框上选择“确认”或是“取消”。由于在对话框销毁前DoModal不会返回,所以可以使用局部变量来引用对象。在退出函数体后对象同时也会被销毁。而对于无模式对话框则不能这样使用,下节5.3 创建无模式对话框中会详细讲解。

你需要根据DoModal()的返回值来决定你下一步的动作,而得到返回值也是使用有模式对话框的一个很大原因。 

使用有模式对话框需要注意一些问题,比如说不要在一些反复出现的事件处理过程中生成有模式对话框,比如说在定时器中产生有模式对话框,因为在上一个对话框还未退出时,定时器消息又会引起下一个对话框的弹出。 

同样的在你的对话框类中为了向调用者返回不同的值可以调用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOK或IDCANCEL,如果你希望返回其他的值,你需要调用

CDialog::EndDialog( int nResult );

其中nResult会作为DoModal()调用的返回值

virtual INT_PTR CDialog::DoModal();

当dlg.DoModal()后,显示一个模态对话框,此时DoModal()函数并不返回,直到用户关闭此对话框时,DoModal才返回。如果用户点击了确定按钮,那么DoModal()函数就返回IDOK。IDOK是一个宏。

当你CMyDlg dlg;时,对话框并没有显示,只要构造了一个CMyDlg类型的对象而已,直到用户调用DoModal(),对话框才会显示出来。

最新文章

  1. python webdriver 自动化测试练习 1-- 在线调查
  2. MMORPG大型游戏设计与开发(part2 of net)
  3. Windows溢出提权小结
  4. raspberry pi
  5. [家里蹲大学数学杂志]第053期Legendre变换
  6. phpspec安装配置
  7. java io异步
  8. poj3507---去掉最小值和最大值
  9. 智能电视TV开发---直播视频客户端结构设计和实现
  10. The Painter's Partition Problem Part I
  11. 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件
  12. ubuntu12.04安装搜狗输入法配置,安装packettracer字体设置,软件推荐
  13. Entity Framework Tools install to VS 2015
  14. Spring框架中 配置c3p0连接池 完成对数据库的访问
  15. HTTP 返回状态代码详解
  16. sqlserver存储过程及mybatis调用——待续
  17. Python:Day48 Jquery
  18. python自动化开发-[第三天]-编码,函数,文件操作
  19. linux之tail和head的使用
  20. ubuntu16.04下载安装navicate

热门文章

  1. Android开发之数组类的面试题目,android工程师java程序员必备
  2. Unity游戏Mono内存管理及泄漏
  3. asp image
  4. Easy Problem(等差数列求和导公式)
  5. 三层架构的一点理解以及Dapper一对多查询
  6. c++基础 写二进制文件
  7. 怎么把后台传过来的Json拼成table 用Jquery ajax()
  8. python基础:异常捕捉
  9. 判断语句 、 while循环 、 for循环
  10. webstorm中emmet展开a标签和行内元素不换行的解决办法