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并重置无模式对话的函数

  • 相关阅读:
    【题解】Luogu1308 统计单词数
    【题解】Luogu1739 表达式括号匹配
    等待
    封城日记
    【题解】luoguP5717三角形分类
    【题解】LuoguP1059明明的随机数
    我是一个跳表
    【JVM故事】了解JVM的结构,好在面试时吹牛
    【JVM故事】一个Java字节码文件的诞生记
    Java多线程通关——基础知识挑战
  • 原文地址:https://www.cnblogs.com/chechen/p/13401390.html
Copyright © 2011-2022 走看看