窗口按钮正在阻止程序

问题描述 投票:0回答:1

所以今天我尝试了WinApi。我打开一个窗口,发现调整大小和移动阻止了该程序。

简单的解决方法:更新程序的计时器(请参见示例)。>>

我进行了更多测试,并注意到:当我按下最大化按钮(也就是最小化和关闭)并按住它时,只要我按住该按钮,计时器就会停止。因此,它再次阻塞了..:/

如何避免它没有被阻塞?任何解决方法?我错过了什么?

[注:我在Minecraft中测试了相同的问题(快速创建Lan连接,是的,我知道它的Java),当我按住最大化按钮时,其他连接断开了,因为它们没有响应。。这就是我要避免的事情在我的程序中。

示例代码:

#include <iostream>
#include <Windows.h>

LRESULT CALLBACK WndProcFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_TIMER:
        std::cout << "Timer" << std::endl;
        break;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}

int main()
{
    WNDCLASS wc{};
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProcFunc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.lpszClassName = "WINCLASS";
    RegisterClass(&wc);

    HWND m_Win = CreateWindow("WINCLASS", "Window", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, GetModuleHandle(NULL), NULL);
    ShowWindow(m_Win, 1);
    UpdateWindow(m_Win);
    SetTimer(m_Win, 1, 500, NULL);

    MSG Msg;
    while (GetMessage(&Msg, NULL, 0, 0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    KillTimer(m_Win, 1);
    DestroyWindow(m_Win);

    return 0;
}

所以今天我尝试了WinApi。我打开一个窗口,发现调整大小和移动阻止了该程序。简单的解决方法:一个用于更新程序的计时器(请参见示例)。我测试了一些...

c++ winapi blocking
1个回答
0
投票

例如,单击最大化按钮,并保持按住状态,将导致GetMessage不再接收消息。未为您的程序指定此行为。从模板创建Windows应用程序可以重现相同的行为。

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