我使用winapi的原始输入设备进行鼠标输入,看起来我没有在我的RAWMOUSE结构中获得正确的值。原始输入设备RAWMOUSE使用
当我拿到RAWMOUSE结构,我得到lLastX和lLastY如我期望的值,但由于某些原因,ulRawButtons是不断0 MSDN文档说,ulRawButtons是“的原鼠标按钮的状态“所以我认为这应该改变,当我按下鼠标按钮。
这是我创建与原始输入装置的代码(I移除错误检查的可读性):
void handleRawInput(HWND window, UINT, WPARAM wParam, LPARAM lParam)
{
RAWINPUT input;
UINT szData = sizeof(input), szHeader = sizeof(RAWINPUTHEADER);
HRAWINPUT handle = reinterpret_cast<HRAWINPUT>(lParam);
GetRawInputData(handle, RID_INPUT, &input, &szData, szHeader);
if (input.header.dwType == RIM_TYPEMOUSE)
{
// Here input.data.mouse.ulRawButtons is 0 at all times.
}
}
我:
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = myWindowHandle;
RegisterRawInputDevices(&rid, 1, sizeof(rid));
的WM_INPUT消息我打电话后使用mingw32(4.7)和我已经定义WIN32_LEAN_AND_MEAN,WINVER = 0x0501和WIN32_WINNT = 0x0501。
任何想法,为什么我没有得到ulRawButtons的正确值?
该值直接来自设备驱动程序。也许你有一个古怪的依赖于使用usButtonFlags的Windows。 –
来自Microsoft MSDN网站的演示代码,主题为“使用原始输入”,网址为https://msdn.microsoft.com/en-us/library/ms645546(v=vs.85).aspx提供了两个键盘的示例和鼠标,作为@Sean Cline在他的回答中提到,我在Win32窗口应用程序中使用这个演示代码显示'data.mouse.ulButtons'和'data.mouse.usButtonFlags'都会随着我点击鼠标垫按钮而改变值然而,我的笔记本电脑'data.mouse.ulRawButtons'似乎总是为零。 –