模态对话框与非模态对话的几种销毁方法与区别

欘孴钩
2013-10-13 · TA获得超过3363个赞
知道小有建树答主
回答量:982
采纳率:0%
帮助的人:686万
展开全部
最后,发现有些基本问题我还没有搞清楚。同时在这个过程中,也学习了不少新东西,网上关于这个问题的资料很多,感觉真正把问题讲清楚的不多。今天我就来个总结,同时,也把网上有些人的疑问给解答下,更重要的是自己以后忘记了,可以回来参考。 先说下模式对话框调用的原则。(就是一定要先关了这个对话框才能操作后面窗口的对话框) 在模式对话框下,用CDialog::OnOK()或CDialog::OnCancel()以及CDialog::OnClose()关闭对话框。 一定要注意之前的CDialog::(当然,你可以重载你自己对话框的这个虚函数,但是,后面必须调用基类的CDialog::) 具体我们再参照深入浅出的风格,来个解刨。 CDialog::Close()默认调用CDialog::OnCancel() , CDialog::OnCancel()调用CDialog::EndDialog(IDCANCEL); CDialog::EndDialog调用CDialog::DestroyWindows(),CDialog::DestroyWindows调用CDialog::OnDestroy() ; CDialog::OnOK()默认先CDialog::UpdateData(),然后再调用CDialog::EndDialog(IDOK). CDialog::EndDialog调用CDialog::DestroyWindows(), CDialog::DestroyWindows调用CDialog::OnDestroy() 看来上面你可能就知道了如下的等式 CDialog::Close() == CDialog::OnCancel() == CDialog::EndDialog(IDCANCEL)一样。 CDialog::OnOK() == CDialog::EndDialog(IDOK). 而CDialog::EndDialog(IDOK)跟CDialog::EndDialog(IDCANCEL)的区别就是,少了一个CDialog::UpdateData(),也就是CDialog::EndDialog(IDOK),在关闭对话框后,会把对话框上控件关联的变量的值更新为用户最后输入的值。而CDialog::EndDialog(IDCANCEL)就不会更新这个值。 希望自己把模式对话框的关闭讲清楚了。 下面说说非模态对话框。 调用原则是: 在无模式对话框,重载你自己的OnOK(),就是CMyDialog::OnOK()调用CDialog::DestroyWindows()。注意:不是默认的CDialog::OnOK()来关闭对话框。 重载CMyDialog::OnCancel()调用CDialog::DestroyWindows()。注意:不是调用默认的CDialog::OnCancel(),来关闭对话框。 听起来很简单,但是下面提到一个很具体的编程问题。 一般,我们用非模态对话框都是全局的,也就是通过new来创建,是在heap上的,而不是在stack上的。 这样我们当然还要通过delete 来销毁对象,不然可是有内存泄漏的。
侍山佛惜天
2020-05-23 · TA获得超过3850个赞
知道大有可为答主
回答量:3051
采纳率:26%
帮助的人:424万
展开全部
模态指令:称续效指令,一经程序段中指定,便一直有效,直到后面出现同组另一指令或被其他指令取消时才有效。
非模态指令:称非续效指令,其功能仅在出现的程序段有效。
希望对你有一点点帮助!(请采纳,谢谢)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式