gpt4 book ai didi

c++ - RawInput 鼠标 - 无法移动窗口或使用控件

转载 作者:行者123 更新时间:2023-11-30 04:07:30 31 4
gpt4 key购买 nike

我目前正在使用 Windows 的 RawInput API 来访问键盘和鼠标输入。我有点困惑的一件事是,当我将鼠标注册为 RawInputDevice 时,我无法移动我的 Win32 窗口或使用那里的控件(关闭、最小化等...)。相反,我得到一个加载图标光标。这是正常行为吗?这是我注册设备的方式:

    RAWINPUTDEVICE Rid[2];

Rid[0].usUsagePage = 0x01;
Rid[0].usUsage = 0x02;
Rid[0].dwFlags = RIDEV_NOLEGACY; // adds HID mouse and also ignores legacy mouse messages
Rid[0].hwndTarget = windowHandle;

Rid[1].usUsagePage = 0x01;
Rid[1].usUsage = 0x06;
Rid[1].dwFlags = RIDEV_NOLEGACY; // adds HID keyboard and also ignores legacy keyboard messages
Rid[1].hwndTarget = windowHandle;

if (RegisterRawInputDevices(Rid, 2, sizeof(Rid[0])) == FALSE) {
// smth went wrong.
}

这就是我处理 WM_INPUT 案例的方式:

case WM_INPUT:
char buffer[sizeof(RAWINPUT)] = {};
UINT size = sizeof(RAWINPUT);
GetRawInputData(reinterpret_cast<HRAWINPUT>(lParam), RID_INPUT, buffer, &size, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = reinterpret_cast<RAWINPUT*>(buffer);
if (raw->header.dwType == RIM_TYPEMOUSE || raw->header.dwType == RIM_TYPEKEYBOARD) {
inputManager.processMessage(*raw);
}
break;

有什么问题吗?

最佳答案

您正在设置 RIDEV_NOLEGACY 标志。这会禁用旧版鼠标消息。

因此默认窗口过程不接收鼠标消息。所以它不能移动你的窗口,或者响应按钮点击,或者其他什么。这就是您所看到的。

关于c++ - RawInput 鼠标 - 无法移动窗口或使用控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455165/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com