windows創建窗口、關閉窗口流程


NC,即 non-client 區域,包括標題欄、窗口邊框、最大、最小按鈕、滾動條等。

一、在調用Windows的::CreateWindowEx函數創建窗口時,一般會先發出 WM_NCCREATE消息,然后發出 WM_CREATE消息。

當窗口准備關閉,此時先發出WM_DESTROY消息,再發出WM_NCDESTROY消息。

順序如下:

WM_NCCREATE
WM_CREATE
。。。。
WM_DESTROY
WM_NCDESTROY


如果在關閉時,這個窗口存在子窗口,那么會先發送子窗口的WM_DESTROY和WM_NCDESTROY消息,接着發送父窗口的WM_DESTROY和WM_NCDESTROY消息。
順序:
WM_DESTROY    //CHILD,子窗口消息
WM_NCDESTROY  //CHILD,子窗口消息
WM_DESTROY    //Parent,父窗口消息    
WM_NCDESTROY  //Parent,父窗口消息

 

二、WM_CLOSE、WM_DESTROY、WM_QUIT區別

WM_CLOSE:關閉應用程序窗口

WM_DESTROY:關閉應用程序

WM_QUIT:關閉消息循環

只有關閉了消息循環,應用程序的進程才真正退出(在任務管理器里消失)。

win32應用程序的完整退出過程:1、點擊窗口右上角的關閉按鈕,發送WM_CLOSE消息。

2、此消息處理中調用DestroyWindow函數,發送WM_DESTROY消息。

3、此消息處理中調用PostQuitMessage(0)函數,發送WM_QUIT消息到消息隊列中。

4、GetMessage捕獲到WM_QUIT,返回0,退出循環(應用程序真正退出)。

注意:按照上述正常流程,WM_QUIT是不會到達窗口過程的。(因為在GetMessage截獲了WM_QUIT消息之后,程序已經徹底退出了!)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM