【发布时间】:2012-12-16 07:17:33
【问题描述】:
我正在使用 winapi 的原始输入设备进行鼠标输入,但我的 RAWMOUSE 结构中似乎没有得到正确的值。
当我得到 RAWMOUSE 结构时,我得到了 lLastX 和 lLastY 的值,但由于某种原因 ulRawButtons 是始终为 0。msdn 文档说 ulRawButtons 是 “鼠标按钮的原始状态”,所以我认为当我按下鼠标按钮时它应该会改变。
这是我用来创建原始输入设备的代码(为了便于阅读,我删除了错误检查):
RAWINPUTDEVICE rid;
rid.usUsagePage = 0x01;
rid.usUsage = 0x02;
rid.dwFlags = RIDEV_INPUTSINK;
rid.hwndTarget = myWindowHandle;
RegisterRawInputDevices(&rid, 1, sizeof(rid));
在 WM_INPUT 消息之后我调用:
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.
}
}
我正在使用 mingw32 (4.7),并且我已经定义了 WIN32_LEAN_AND_MEAN、WINVER=0x0501 和 WIN32_WINNT=0x0501。
知道为什么我没有得到正确的 ulRawButtons 值吗?
【问题讨论】:
-
该值直接来自设备驱动程序。也许你有一个古怪的,它使用 usButtonFlags 依赖于 Windows。
-
Microsoft MSDN 网站上msdn.microsoft.com/en-us/library/ms645546(v=vs.85).aspx 上关于“使用原始输入”主题的演示代码提供了键盘和鼠标的示例,正如@Sean Cline 在他的回答中提到的那样,我对此的使用Win32 窗口应用程序中的演示代码显示
data.mouse.ulButtons和data.mouse.usButtonFlags在我单击笔记本电脑上的鼠标垫按钮时都会更改值,但data.mouse.ulRawButtons似乎总是为零。