Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1035314
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-12-14 19:13:04

为什么不能直接给应用程序发送WM_QUIT进行关闭程序
 
要搞清楚这个问题我们必须弄清楚当用户按下了关闭按钮以后windows的处理步骤和消息流程:
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往往要在最后时刻进行一些清理工作。

阅读(2359) | 评论(0) | 转发(0) |
0

上一篇:auto_ptr shared_ptr

下一篇:Windows消息队列

给主人留下些什么吧!~~