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消息之后,程序已經徹底退出了!)