MSDN 示例代码:
LRESULT CALLBACK WindowProc(
__in HWND hWindow,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWindow);
break;
case WM_DESTROY:
// TODO: huidong 温馨提醒你在这里回收内存
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWindow, uMsg, wParam, lParam);
}
return 0;
}
也就是说,当用户点击程序的关闭按钮,程序就收到 WM_CLOSE,然后在这里发送销毁窗口的指令(DestroyWindow),随后,程序收到 WM_DESTROY 消息,就回收内存,然后调用 PostQuitMessage 退出程序。
MSDN:
DestroyWindow
销毁指定的窗口。 该函数向窗口发送 WM_DESTROY 和 WM_NCDESTROY 消息以将其停用并从中移除键盘焦点。 该函数还销毁窗口的菜单、刷新线程消息队列、销毁计时器、删除剪贴板所有权并中断剪贴板查看器链(如果窗口位于查看器链的顶部)。
如果指定的窗口是父窗口或所有者窗口, DestroyWindow 在销毁父窗口或所有者窗口时会自动销毁关联的子窗口或拥有的窗口。 该函数首先销毁子窗口或拥有的窗口,然后销毁父窗口或所有者窗口。
线程不能使用 DestroyWindow 来销毁由不同线程创建的窗口。
PostQuitMessage
向系统指示线程已请求终止(退出)。 它通常用于响应 WM_DESTROY 消息。