Win32的新项目就一个空白窗口一旦按键就会未响应。
#include <Windows.h>
// 函数声明
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
// 消息分发
switch (Msg)
{
case WM_DESTROY:
PostQuitMessage(EXIT_SUCCESS);
break;
default:
break;
}
// 返回结果
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
// 入口函数
int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
// 注册窗口类
WNDCLASS wc = {};
wc.lpszClassName = L"ExampleWindowClass";
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
//wc.lpfnWndProc = DefWindowProc;
if (!RegisterClass(&wc))
{
DWORD err = GetLastError();
ExitThread(err);
}
// 创建窗口
HWND hWnd = CreateWindowEx(0, wc.lpszClassName, L"Example", WS_OVERLAPPEDWINDOW | WS_TABSTOP, 200, 200, 300, 400, NULL, NULL, hInstance, NULL);
if (!hWnd) {
DWORD err = GetLastError();
ExitThread(err);
}
// 显示窗口
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
// 消息处理
MSG msg;
while (GetMessage(&msg, hWnd, 0, 0) > 0)
{
// 翻译消息
TranslateMessage(&msg);
// 派发消息
DispatchMessage(&msg);
}
// 返回结果
return EXIT_SUCCESS;
}
环境:Win10 x64,Visual Studio 2022,项目属性字符集Unicode或多字节都试过
问题:
运行后,将创建一个 空白窗口,当窗口处于激活获得焦点时,
只要键盘有键按下,那么这个窗口就再也无法得到任何响应(但却不是未响应的卡死的那种)
除此之外,其他一切都正常,期间测试消息触发,加上按钮点击什么的,都可以。
看着代码没啥问题,vs2015,2019测试也没问题 楼主可能发现了vs2022的bug 不知道所说的未响应是什么样的一个状态,上面的代码会处理所有消息,但是界面不会刷新。 ESMGAL 发表于 2021-11-14 10:55
不知道所说的未响应是什么样的一个状态,上面的代码会处理所有消息,但是界面不会刷新。
不知道你用过OD之类的软件没,大概就和被OD点了暂停运行一样 ryosga 发表于 2021-11-14 09:57
楼主可能发现了vs2022的bug
我用VS 2019创建一个新的解决方案,新的桌面应用向导空白项目,然后添加一个CPP文件,粘贴我的代码,启动运行,对着窗口按一下键盘,也是一样未响应。 事件处理函数对于WM_PAINT事件没有给出响应。
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
} 哎,完结撒花,问题出在 GetMessage(&msg, hWnd, 0, 0),改成GetMessage(&msg, NULL, 0, 0) 就可以了。
页:
[1]