所以今天我尝试了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。我打开一个窗口,发现调整大小和移动阻止了该程序。简单的解决方法:一个用于更新程序的计时器(请参见示例)。我测试了一些...
例如,单击最大化按钮,并保持按住状态,将导致GetMessage不再接收消息。未为您的程序指定此行为。从模板创建Windows应用程序可以重现相同的行为。