WM_DESTROY ,WM_CLOSE,WM_QUIT

转载 2012年03月24日 10:09:08
WM_DESTROY 是关闭程序的
WM_CLOSE 是关闭窗口的
WM_QUIT 是关闭消息环的

以下说明程序是如何退出的:
 使用者选按,于是发出 WM_CLOSE。
 
 CMyFrameWnd 并没有设置WM_CLOSE 处理常式,于是交给预设之处理常式。
预设函数对于WM_CLOSE 的处理方式是呼叫 ::DestroyWindow, 并因而发出WM_DESTROY。
 预设之WM_DESTROY 处理方式是呼叫::PostQuitMessage,因此发出WM_QUIT。
 CWinApp::Run 收到WM_QUIT 后会结束其内部之讯息回路, 然后呼叫ExitInstance,这是CWinApp 的一个虚拟函数。
 如果CMyWinApp 改写了ExitInstance , 那么CWinApp::Run 所呼叫的就是CMyWinApp::ExitInstance,否则就是 CWinApp::ExitInstance。
最后回到 AfxWinMain,执行 AfxWinTerm,结束程序
WM_CLOSE,调用DestroyWindow()DestroyWindow()又发送WM_DESTROY响应WM_DESTROY,调用WM_QUITGetMessage()发现WM_QUIT,退出程序
--------------------------------------------------------

1楼:

一般是响应WM_CLOSE,调用DestroyWindow() 
DestroyWindow()又发送WM_DESTROY 
响应WM_DESTROY,调用PostQuitMessage(),
GetMessage()发现WM_QUIT,退出程序

2楼:

先,例如你在系统菜单里选择了“关闭”或者点击了窗口又上角的那个“X”按钮,你的窗口过程就会收到WM_CLOSE。DefWindowProc对WM_CLOSE的处理是调用DestroyWindow。当然,你可以不让DefWindowProc处理,而是自己处理,例如询问用户是否保存更改等。如果用户选择“取消”,你忽略此消息,那么程序照常运行;如果用户确认要退出,你就调用DestroyWindow。 
接下来,DestroyWindow完成窗口的清理工作,最后像窗口过程发送WM_DESTROY。对于WM_DESTROY,DefWindowProc不会处理。也就是说,你如果不处理这个消息,虽然你的窗口已经销毁,但进程并不会结束。一般处理WM_DESTROY时都是释放资源(例如申请的内存等),然后调用PostQuitMessage。 
PostQuitMessage会发送WM_QUIT给消息队列。注意,WM_QUIT永远不会到达窗口过程,因为GetMessage得到WM_QUIT后就会返回FALSE,从而结束消息循环,最后进程结束,程序退出。

3楼:

close是关闭窗口, 
destroy是销毁窗口,windows的一般处理是PostQuitMessage即发送一个quit消息,即退出消息循环


WM_CLOSE WM_QUIT WM_DESTROY 三者的区别

一直以来,我都不是很明白这三个的区别,今天看了一写文章,才明白过来,一下是转载的文字:有三个消息看起来差不多,都是处理关闭的事情的。它们是WM_DESTROY,WM_CLOSE,和WM_QUIT。它们...
  • tunnel115
  • tunnel115
  • 2009年09月12日 21:17
  • 7098

WM_DESTROY ,WM_CLOSE ,WM_QUIT 的区别

WM_QUIT,WM_CLOSE,WM_DESTROY      WM_DESTROY 是关闭程序      WM_CLOSE 是关闭窗口      WM_QUIT 是关闭消息环...
  • u011045817
  • u011045817
  • 2014年01月25日 21:11
  • 470

当一个窗口关闭时WM_CLOSE,WM_DESTROY,WM_QUIT

当一个窗口关闭时WM_CLOSE,WM_DESTROY,WM_QUIT    转载▼   一般是响应WM_CLOSE,调用DestroyWindow() ...
  • u011559491
  • u011559491
  • 2015年06月16日 13:42
  • 1481

WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解

本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下: 一、WM_CLOSE、WM_DESTRO...
  • u012372584
  • u012372584
  • 2016年02月03日 16:39
  • 527

阻止窗口关闭 WM_CLOSE,WM_DESTROY,WM_QUIT

// DEMO3_7.CPP - WM_CLOSE demo// INCLUDES ///////////////////////////////////////////////#define WIN...
  • wenzhoufeng
  • wenzhoufeng
  • 2007年11月23日 12:43
  • 4285

WM_CLOSE, WM_DESTROY, WM_QUIT

WM_DESTROY 是关闭程序      WM_CLOSE 是关闭窗口      WM_QUIT 是关闭消息环              WM_CLOSE和WM_DESTROY同属窗...
  • guanghuatan
  • guanghuatan
  • 2012年10月09日 14:40
  • 263

WM_CLOSE WM_DESTROY WM_QUIT 区别

在发送 WM_QUIT消息时,要使用PostMessage发送,否则,窗口已经关闭,但任务管理器中进程还存在。 可以通过 pDlg->PostMessage(WM_QUIT);或 DWOR...
  • Howard_Liu1314
  • Howard_Liu1314
  • 2013年08月16日 15:38
  • 552

WM_DESTROY, WM_CLOSE, WM_QUIT 区别

WM_DESTROY, WM_CLOSE, WM_QUIT 区别(转:只为收藏)开始我也很迷糊,后来看了相关的资料,现在明白了,我这里就转一些相关的文章吧.WM_DESTROY, WM_CLOSE, ...
  • lw8410
  • lw8410
  • 2011年03月31日 16:21
  • 548

WM_QUIT,WM_CLOSE,WM_DESTROY

WM_DESTROY 是关闭程序  WM_CLOSE 是关闭窗口 WM_QUIT 是关闭消息环            WM_CLOSE和WM_DESTROY同属窗口消息,WM_QUIT则不在...
  • Plutus_Lee
  • Plutus_Lee
  • 2013年11月23日 17:15
  • 886

WM_CLOSE、WM_QUIT、WM_DESTROY区别

在实际开发中可能不太关注这些区别,但是了解清楚细节还是有好处的
  • alien75
  • alien75
  • 2010年09月26日 12:21
  • 1065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WM_DESTROY ,WM_CLOSE,WM_QUIT
举报原因:
原因补充:

(最多只允许输入30个字)