windows窗口关闭的消息响应机制

来源:互联网 发布:python heatmap 编辑:程序博客网 时间:2024/06/04 19:02
1、当你按下了“关闭”按钮或选取了“退出”菜单项之后,WM_CLOSE消息被发送给了应用程序的窗口处理过程函数。该函数对该消息的缺省处理仅为调用DestroyWindow()API函数,导致窗口被销毁。
2、当窗口的客户区被销毁的时候WM_DESTROY消息被发给了应用程序的窗口处理过程。程序员可以在此释放他自己分配的与窗口客户区相关的资源,而窗口过程函数缺省的处理仅为调用PostQuitMessage()函数,这将导致WM_QUIT消息被送进应用程序的消息队列。
3、随后窗口的非客户区(包括菜单栏、标题栏、状态栏等)被销毁,此时WM_NCDESTROY消息被发送给了应用程序的窗口过程。这个消息也是窗口过程处理的最后一个消息,程序员可以在这里释放他自己分配的而一直没有释放的内存。使用了MFC创建的应用程序往往要在这个消息响应函数当中进行一些释放内存和资源的工作。
4、而应用程序的消息检测函数GetMessage()一旦检索到WM_QUIT消息,就会返回False,从而结束消息循环,并且让应用程序的WinMain()函数返回,从而结束应用程序。因此应用程序的窗口处理过程是不可能处理到这条WM_QUIT消息的。
5、综上所述,如果我们是用SDK方法编写应用程序而又不需要在程序结束的时候释放用new及其他内存分配函数显式分配的内存的话,我们完全可以直接通过向应用程序发送WM_QUIT消息让程序退出。

6、如果我们利用了MFC创建应用程序则最好通过发送WM_CLOSE消息让应用程序结束。因为MFC往往要在最后时刻进行一些清理工作。

————————————————————————————————————————————————

对话框退出调用什么函数主要看你按哪个按钮退出的了,一般就三种情况:
(1)点击IDOK按钮退出:先调用OnOK(),然后是OnDestory(),最后是PostNcDestroy() 
(2)点击IDCANCEL按钮退出:先调用OnCancel(),然后是OnDestory(),最后是PostNcDestroy() 
(3)点击右上角的关闭按钮退出:先OnClose(),然后是OnCancel(),再然后是OnDestory() ,最后是PostNcDestroy()