我正在使用winapi的原始输入设备进行鼠标输入,似乎我在RAWMOUSE结构中没有得到正确的值。
当我得到RAWMOUSE结构时,我得到了 lLastX 和 lLastY 的值,但是出于某种原因, ulRawButtons 是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的正确值?
答案 0 :(得分:2)
Windows使用鼠标驱动程序通过RAWMOUSE
结构体来填充MOUSE_INPUT_DATA
结构。
您会注意到MOUSE_INPUT_DATA
的{{3}}声明如下:
<强> RawButtons 强>
指定鼠标按钮的原始状态。 Win32子系统不使用此成员。
MSDN页面没有说的是,Win32不仅不使用RawButtons
/ ulRawButtons
,而且它所附带的鼠标驱动程序也不会填充它们。因此,除非您有来自第三方供应商的鼠标驱动程序,否则您永远不会设置此字段。
我认为您要使用的是:input.data.mouse.usButtonFlags
用于鼠标点击,input.data.mouse.usButtonData
用于滚轮增量。