吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 953|回复: 8
收起左侧

[求助] Win32的新项目就一个空白窗口一旦按键就会未响应。

[复制链接]
你不会了解 发表于 2021-11-14 04:20
[C++] 纯文本查看 复制代码
#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或多字节都试过

问题:

运行后,将创建一个 空白窗口,当窗口处于激活获得焦点时,

只要键盘有键按下,那么这个窗口就再也无法得到任何响应(但却不是未响应的卡死的那种)

除此之外,其他一切都正常,期间测试消息触发,加上按钮点击什么的,都可以。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2021-11-14 09:50
看着代码没啥问题,vs2015,2019测试也没问题
ryosga 发表于 2021-11-14 09:57
ESMGAL 发表于 2021-11-14 10:55
不知道所说的未响应是什么样的一个状态,上面的代码会处理所有消息,但是界面不会刷新。
 楼主| 你不会了解 发表于 2021-11-14 12:00
ESMGAL 发表于 2021-11-14 10:55
不知道所说的未响应是什么样的一个状态,上面的代码会处理所有消息,但是界面不会刷新。

不知道你用过OD之类的软件没,大概就和被OD点了暂停运行一样
 楼主| 你不会了解 发表于 2021-11-14 12:05
ryosga 发表于 2021-11-14 09:57
楼主可能发现了vs2022的bug

我用VS 2019创建一个新的解决方案,新的桌面应用向导空白项目,然后添加一个CPP文件,粘贴我的代码,启动运行,对着窗口按一下键盘,也是一样未响应。
hellozl 发表于 2021-11-14 12:25
事件处理函数对于WM_PAINT事件没有给出响应。

[C++] 纯文本查看 复制代码
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);
}
 楼主| 你不会了解 发表于 2021-11-14 12:36
哎,完结撒花,问题出在 GetMessage(&msg, hWnd, 0, 0),改成  GetMessage(&msg, NULL, 0, 0) 就可以了。
头像被屏蔽
Spoofing 发表于 2021-11-14 13:40
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表