关于OnOK 的模式对话框非的模式对话框.docxVIP

关于OnOK 的模式对话框非的模式对话框.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于OnOK 的模式对话框非的模式对话框

关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框非模式对话框  总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)  2009年09月22日下午 08:33  第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。  第二,OnClose()和OnDestroy()  在单视图程序中,根据深入浅出MFC所讲,程序退出时执行的操作顺序为(从点X按钮开始)  (1)用户点击X退出按钮,发送了WM_CLOSE消息-----响应OnClose()  (2)在WM_CLOSE消息的处理函数中,调用DestroyWindow()-----销毁与指定CWnd窗口对象关联的窗口,但未销毁CWnd对象  (3)在DestroyWindow()中发送了WM_DESTROY消息-----窗口销毁后响应OnDestroy()  (4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,结束消息循环  可以看到,程序的退出过程,是先响应OnClose(),然后响应OnDestroy(),在响应OnDestroy()之前,窗口对象已经被销毁。OnDestroy()到底干了什么呢?它就像一个teller,先通知CWnd对象告诉它即将被销毁,尔后OnDestroy的真正运行是在CWnd对象已经从屏幕上清除以后被调用的。  第三,OnOK()、OnCancel()()、OnClose()、OnDestroy()  CDialog::OnOK首先调用UpdateData(TRUE)将数据传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框;  CDialog::OnCancel只调用CDialog::EndDialog关闭对话框;  OnClose()是响应 WM_CLOSE 的.一定程度上可以说CDialog::EndDialog()和OnClose()完成类似的工作,但处理的机制不一样,前者是CDialog的对象机制,后者是WM的消息映射机制。  CDialog::EndDialog()--------OnDestroy()  OnClose()--------OnDestroy()  EndDialog()和OnClose()属于“同级别”的,所以我们在按下OK按钮的时候,程序是不会执行OnClose()的,但两种机制都必须经过OnDestroy()  本文来自CSDN博客,转载请标明出处:/wind1987321/archive/2009/09/21/4576585.aspx  然后发现  下面这两种说法不明晰  (1) EndDialog(-1);  关闭模态对话框,并且将参数作为父对话框调用的返回值。  (2) DestroyWindow(); ::PostQuitMessage(0);  DestroyWindow关闭非模态对话框。退出消息循环,真正结束进程。有不少程序窗口关闭,但是不等于退出运行。  cDialog::onok(),enddialog(),destroywindow区别。收藏  模式和无模式对话的中止是不一样的:模式对话通过调用CDialog : : EndDialog来中止,无模式对话则是调用CWnd: : DestroyWindow来中止的,函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数。  最后三个还不错  Windows API一日一练(18)EndDialog函数收藏  上一次介绍了怎么样显示对话框的函数,那么怎么样关闭对话框呢?这就需要使用到函数EndDialog。这个函数只能在对话框的消息处理函数里使用,并且这个函数调用之后,没有立即就删除对话框的,而是设置了操作系统里的结束标志。当操作系统查检到有这个标志时,就去删除对话框的消息循环,同时也去释放对话框占用的资源。其实对话框的生命周期是这样的,先由函数DialogBox创建对话框,这样函数DialogBox完成创建对话框但还没有显示前会发出消息WM_INITDIALOG,让对话框有机会初始化上面所有窗口或控件的显示,比如设置文本框的字符串等。最后当用户点出确定或者取消的按钮,就收到两个命令IDOK或IDCANCEL,这时就可以调用函数EndDialog来结束

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档