博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DoModal 函数的用法
阅读量:6672 次
发布时间:2019-06-25

本文共 933 字,大约阅读时间需要 3 分钟。

hot3.png

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

CYourView::OnOpenDlg() { CYourDlg dlg; int iRet=dlg.DoModal(); }

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

你需要根据DoModal()的返回值来决定你下一步的动作,而得到返回值也是使用有模式对话框的一个很大原因。 
使用有模式对话框需要注意一些问题,比如说不要在一些反复出现的事件处理过程中生成有模式对话框,比如说在定时器中产生有模式对话框,因为在上一个对话框还未退出时,定时器消息又会引起下一个对话框的弹出。 
同样的在你的对话框类中为了向调用者返回不同的值可以调用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOKIDCANCEL,如果你希望返回其他的值,你需要调用  

CDialog::EndDialog( int nResult );

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

virtual INT_PTR CDialog::DoModal();

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

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

转载于:https://my.oschina.net/u/204616/blog/545245

你可能感兴趣的文章
RDS作业功能的支持
查看>>
跟着实例学习ZooKeeper的用法: 计数器
查看>>
JavaScript Function类型
查看>>
linux之select函数用法详解
查看>>
翻翻git之---史上最强的图片选择器 GalleryFinal(顺带附下麦麦,当当的近照)
查看>>
SSL/TLS Bar Mitzvah Attack 漏洞 [ 受诫礼(BAR-MITZVAH) ]
查看>>
web图片优化(5)
查看>>
千里之行始于足下 | 开篇 - 增长极客
查看>>
[知识图谱] 1.2-知识图谱有什么用?
查看>>
EMOS搭建过程以及安装后配置
查看>>
LVS-NAT模式工作原理及配置
查看>>
我的友情链接
查看>>
Oracle IO问题解析(七)
查看>>
【HAVENT原创】k8s docker 管理 和 网页接口 监控系统
查看>>
1111111
查看>>
linux 学习前的准备 centos6的安装!
查看>>
Linux 下 IPsec-tools的使用
查看>>
ssh使用公钥授权不通过的问题解决
查看>>
iPad2 A5完美越狱获得重大进展--转载
查看>>
linux 调优 I/O 优化
查看>>