为什么对View 发送WM_CLOSE,只是View被清除了,而程序没有退出,对View发送WM_DESTROY什么都没发生
而对Frame发送WM_CLOSE,程序都退出了,对Frame发送WM_DESTROY发送WM_DESTROY只是工具栏没有了,就算是Frame没有了的话,那View也应该没有啊,因为View是依附于Frame之上的,为什么对Frame发送WM_DESTROY程序没有退出
深入浅出MFC是这么说的,单击close命令时,系统发出WM_CLOSE,通常程序的窗口函数不拦截次消息,于是DefWindowProc处理它。
DefWindowProc收到WM_CLOSE后,调用DestroyWindow把窗口清除,DestroyWindow本身又会发出WM_DESTROY,程序的WM_DESTROY的标准反应是调用PostQuitMessage,发出WM_QUIT,然后结束程序
那么对View发送WM_DESTROY不应该Quit吗?

解决方案 »

  1.   

    WM_DESTROY是windows在关闭你的窗口时发给你的窗口的,你自己发有不可预料的后果。
      

  2.   

    WM_CLOSE会导致窗体执行OnCancel(),而OnCancel()中却执行的是EndDialog(),该函数并非立刻退出程序的,而是要过一段时间,msdn上有写的。
      

  3.   

    DefWindowProc收到WM_CLOSE后,调用DestroyWindow把窗口清除,DestroyWindow本身又会发出WM_DESTROY,程序的WM_DESTROY的标准反应是调用PostQuitMessage,发出WM_QUIT,然后结束程序 
    -------
    sdk的初级教科书都喜欢这么说,那么针对只有一个界面的程序。
    对于MFC程序,是检测到线程主窗口被关闭才PostQuitMessage退出消息循环。
    一个典型的MFC程序这么多窗口,随便关个view就推出消息循环那还了得
      

  4.   

    对View发送WM_DESTROY不应该Quit吗?
    这是明显的不可预测。
    因为:你把视图销毁了,但是其他的框架还在。所以根本不会退出。
    即便销毁的也是视图,文档和其他的框架不会被销毁。你这么做会造成不可预知的错误。
      

  5.   

    MFC有自己的一套方法处理吧?可以不用API的方式