zoukankan      html  css  js  c++  java
  • MFC 模式对话框、非模式对话框关闭过程

    转载:https://www.cnblogs.com/lidabo/archive/2012/07/04/2576590.html

    工作中没有小事:点石成金,滴水成河,只有认真对待自己所做的一切事情,才能克服万难,取得成功。


    因为最近一直援助一个项目,没怎么接触新的东西,但在改问题的过程中对于一些基础的东西认识更深了,在此记录一下,这是借鉴别人的成果,但实际项目中体会到的用法。

    简单梳理一下窗口关闭流程:

    (1)用户点击"X"关闭窗口,触发WM_CLOSE消息响应OnClose()函数
    (2)在WM_CLOSE消息的处理函数中,调用DestroyWindow()销毁与指定CWnd窗口对象关联的窗口,但未销毁CWnd对象

    (3)在DestroyWindow()中发送了WM_DESTROY消息窗口销毁后响应OnDestroy()

    (4)在WM_DESTROY消息中调用PostQuitMessage(),发送WM_QUIT消息,结束消息循环

    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()

    cDialog::onok(),enddialog(),destroywindow区别

    模式和无模式对话的中止是不一样的:

    模式对话通过调用CDialog : : EndDialog 来中止;

    非模式对话则是调用CWnd: : DestroyWindow来中止的,

    函数CDialog : : OnOK和CDialog : : OnCancel调用EndDialog ,所以需要调用DestroyWindow并重置无模式对话的函数

  • 相关阅读:
    在虚拟机VM中安装的Ubuntu上安装和配置Hadoop
    初识Hadoop
    Hold住:坚持的智慧
    《人生若只如初见》读后感
    EAS部署:linux 下安装EAS后启动不了服务
    修改Tomcat默认端口
    IntelliJ IDEA工具使用总结
    Mac OSX 包管理工具
    Mac 下安装、卸载Java 7
    MySQL快速命令
  • 原文地址:https://www.cnblogs.com/chechen/p/13401390.html
Copyright © 2011-2022 走看看