LRESULT window_procedure(HWND window, UINT message, WPARAM wparam, LPARAM lparam)
{
switch (message)
{
case WM_MOVE:
{
return 0; // (1)
}
case WM_SIZE:
{
return 0;
}
case WM_PAINT:
{
ValidateRect(window, NULL); // (2)
return 0;
}
}
return DefWindowProcA(window, message, wparam, lparam);
}
while (TRUE)
{
MSG message;
BOOL result = PeekMessageA(&message, NULL, 0, 0, PM_REMOVE);
TranslateMessage(&message);
DispatchMessageA(&message);
}
我有这样一段代码,我发现当我调整一个窗口的大小时,当我松开鼠标按钮时,调整大小的手柄不会自动释放。
我尝试了一些方法来解决这个问题。
DefWindowProc
在(1)ValidateRect
在(2)请赐教,这些都有什么意义!
问题就在这里。
while (TRUE)
{
MSG message;
BOOL result = PeekMessageA(&message, NULL, 0, 0, PM_REMOVE);
TranslateMessage(&message);
DispatchMessageA(&message);
}
代码继续发送消息,即使是在... result
是 FALSE
. 要么将调用的内容包装成 TranslateMessage
和 DispatchMessage
里面 if (result)
条件,或者正确初始化你的变量(MSG message{};
),或者使用一个更传统的消息循环,调用 GetMessage
代替 PeekMessage
(见 使用消息和消息队列).