EasyX 中使用 WM_CLOSE 关闭窗口的方法
在 EasyX 图形库中,关闭窗口通常涉及到 Windows 消息处理机制,特别是 WM_CLOSE 消息。WM_CLOSE 是 Windows 系统在用户尝试关闭窗口时发送的消息,例如点击窗口右上角的关闭按
钮。处理这个消息可以让你控制窗口关闭的行为,比如在关闭前提示用户保存数据,或者阻止窗口关闭。
WM_CLOSE 与其他关闭消息的区别
在 Windows 编程中,除了 WM_CLOSE,还有 WM_DESTROY 和 WM_QUIT 消息,它们都与窗口关闭有关,但有着不同的用途和触发时机:
WM_CLOSE:当用户尝试关闭窗口时发送,例如点击关闭按钮。你可以在这个消息的处理中添加确认对话框,或者执行其他关闭前的操作。
WM_DESTROY:当窗口被销毁时发送,通常在 WM_CLOSE 消息处理后,调用 DestroyWindow 函数时触发。在这个消息的处理中,你可以释放窗口相关的资源。
WM_QUIT:当应用程序需要退出时发送,通常在 WM_DESTROY 消息处理后,调用 PostQuitMessage 函数时触发。这个消息会导致消息循环结束,程序退出。
这些消息的处理顺序通常是 WM_CLOSE -> WM_DESTROY -> WM_QUIT
#include <easyx.h>
#include <stdio.h>
WNDPROC g_OriginWndProc = NULL;
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CLOSE) {
//退出前操作
DestroyWindow(hwnd); //销毁窗口
}
else if (uMsg == WM_DESTROY) {
PostQuitMessage(0); //发送退出消息
}
else {
LRESULT result = CallWindowProc((WNDPROC)g_OriginWndProc, hwnd, uMsg, wParam, lParam);
return result;
}
}
int main() {
HWND hwnd = initgraph(600, 600);
g_OriginWndProc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_WNDPROC);
SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)WindowProc);
ExMessage msg;
while (1)
{
if (peekmessage(&msg, -1, true))
{
if (msg.message == WM_KEYDOWN && msg.vkcode == VK_ESCAPE)
{
//退出前操作
}
}
}
closegraph();
return 0;
}

浙公网安备 33010602011771号