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