松开鼠标键时不能停止调整窗口大小

问题描述 投票:0回答:1
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);
}

我有这样一段代码,我发现当我调整一个窗口的大小时,当我松开鼠标按钮时,调整大小的手柄不会自动释放。

我尝试了一些方法来解决这个问题。

  1. 返回 DefWindowProc 在(1)
  2. 移除 ValidateRect 在(2)

请赐教,这些都有什么意义!

windows winapi
1个回答
2
投票

问题就在这里。

while (TRUE)
{
    MSG message;
    BOOL result = PeekMessageA(&message, NULL, 0, 0, PM_REMOVE);
    TranslateMessage(&message);
    DispatchMessageA(&message);
}

代码继续发送消息,即使是在... resultFALSE. 要么将调用的内容包装成 TranslateMessageDispatchMessage 里面 if (result) 条件,或者正确初始化你的变量(MSG message{};),或者使用一个更传统的消息循环,调用 GetMessage 代替 PeekMessage (见 使用消息和消息队列).

© www.soinside.com 2019 - 2024. All rights reserved.