hur.cn - 华软网

 热门搜索

我对窗口的理解对吗,大家请狠批,谢谢。

  作者:未知    来源:网络    更新时间:2011/7/15
我对窗口的理解对吗,大家请狠批,谢谢。

WM_CLOSE 是关闭窗口的
WM_DESTROY 是关闭程序的
WM_QUIT 是退出消息环的

以下说明程序是如何退出的:
1.当使用者选按【File/Close】,此时默认的窗口处理函数 DefWindowProc会进行处理,它会向窗口发送一条 WM_SYSCOMMAND消息,
2.窗口函数收到 WM_SYSCOMMAND 消息后,又将该消息转给默认的窗口函数 DefWindowProc 处理,作为响应,DefWindowProc 又给窗口
发送一条消息 WM_CLOSE 消息。

3.DefWindowProc 收到 WM_CLOSE 后,就调用 DestroyWindow()来对 WM_CLOSE做出响应。
4.DestroyWindow()会向窗口发送一条 WM_DESTROY消息,(当窗口收到wm_destroy消息时,窗口已经从视觉中消失了)

5.窗口收到 WM_DESTROY 后,就调用 PostQuitMessage()来对 WM_DESTROY 消息进行响应。
6.PostQuitMessage()发送一条 WM_QUIT消息作为对 wm_destroy消息的响应。

7.窗口收到 WM_QUIT 消息后,退出消息循环
---华软 网友回答---
你的解释差不多了  想了解更多可以看看MFC的书
---华软网友回复---
正好收藏一下,总结的不错
---华软网友回复---
很多不太对
---华软网友回复---
这是你理解的吗,不是《windows程序设计》上的吗?
---华软网友回复---
引用 3 楼 tr0j4n 的回复:
很多不太对

请指出来,谢谢了。
---华软网友回复---
WM_CLOSE 是关闭窗口的
WM_DESTROY 是关闭程序的
WM_QUIT 是退出消息环的
=========
前两个不太对。
WM_CLOSE是你点窗口右上角那个叉时发出的消息,此时窗口并没有被关闭。DefWindowProc处理WM_CLOSE时会关闭窗口,关闭之后会发送WM_DESTROY消息,通知应用程序,窗口已经关闭了。
---华软网友回复---
其实你后面的叙述没有什么问题。
---华软网友回复---
谢谢老师指教
---华软网友回复---
MFC.Windows程序设计
Windows程序设计第五版
---华软网友回复---
Support above lz!你需要好好学习下《深入浅出MFC》
---华软网友回复---
引用 10 楼 crazyhuman 的回复:
Support above lz!你需要好好学习下《深入浅出MFC》

难道,我说的非常离谱吗
---华软网友回复---
引用 11 楼 ok2ok2ok2 的回复:
引用 10 楼 crazyhuman 的回复:
Support above lz!你需要好好学习下《深入浅出MFC》

难道,我说的非常离谱吗

我觉得你理解的不错啊,尤其是后面的过程,很清楚,没什么大错。
---华软网友回复---
5.窗口收到 WM_DESTROY 后,就调用 PostQuitMessage()来对 WM_DESTROY 消息进行响应。
6.PostQuitMessage()发送一条 WM_QUIT消息作为对 wm_destroy消息的响应。
----------------
一般程序的主窗口才这样

7.窗口收到 WM_QUIT 消息后,退出消息循环
------
线程GetMessage()时遇到 WM_QUIT 消息后,返回0,while()退出消息循环

WM_DESTROY 是关闭程序的这个完全不沾边

---华软网友回复---
 很不错吧。毕竟MS把细节都封闭起来了
---华软网友回复---
WM_DESTROY是销毁窗口的。不是结束程序的。

------------------------------------------------------------------------

---华软网友回复---
看MSDN的解释:
An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the DestroyWindow function only if the user confirms the choice.

By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.

---华软网友回复---
WM_DESTORY:
The WM_DESTROY message is sent when a window is being destroyed. It is sent to the window procedure of the window being destroyed after the window is removed from the screen. 

This message is sent first to the window being destroyed and then to the child windows (if any) as they are destroyed. During the processing of the message, it can be assumed that all child windows still exist.

---华软网友回复---
C++">
LRESULT WINAPI
DefWindowProcA(HWND hWnd,
       UINT Msg,
       WPARAM wParam,
       LPARAM lParam)
{
   BOOL Hook, msgOverride = FALSE;
   LRESULT Result = 0;

   LOADUSERAPIHOOK

   Hook = BeginIfHookedUserApiHook();
   if (Hook)
      msgOverride = IsMsgOverride(Msg, &guah.DefWndProcArray);

   /* Bypass SEH and go direct. */
   if (!Hook || !msgOverride)
      return RealDefWindowProcA(hWnd, Msg, wParam, lParam);

   _SEH2_TRY
   {
      Result = guah.DefWindowProcA(hWnd, Msg, wParam, lParam);
   }
   _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
   {
   }
   _SEH2_END;

   EndUserApiHook();

   return Result;
}
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。