pue*_*elo 2 c++ winapi raw-input
我目前正在使用 Windows 的 RawInput API 来访问键盘和鼠标输入。我有点困惑的一件事是,当我将鼠标注册为 a 时,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.
}
Run Code Online (Sandbox Code Playgroud)
这就是我处理此案的方式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;
Run Code Online (Sandbox Code Playgroud)
有什么不对?
你正在设置RIDEV_NOLEGACY旗帜。这会禁用旧的鼠标消息。
因此默认的窗口消息处理程序不接收鼠标消息。所以它不能移动你的窗口,或响应按钮点击,或其他什么。这就是你所看到的。
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |