1

我正在使用 winapi 的原始输入设备进行鼠标输入,看来我的 RAWMOUSE 结构中没有得到正确的值。

当我得到 RAWMOUSE 结构时,我得到了我期望的lLastXlLastY的值,但由于某种原因,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_MEANWINVER=0x0501WIN32_WINNT=0x0501

任何想法为什么我没有得到 ulRawButtons 的正确值?

4

1 回答 1

3

RAWMOUSEWindows用鼠标驱动程序通过结构告诉它的内容填充MOUSE_INPUT_DATA结构。

您会注意到MSDN 页面MOUSE_INPUT_DATA声明如下:

原始按钮

指定鼠标按钮的原始状态。Win32 子系统不使用该成员。

MSDN 页面没有说的是,Win32 不仅不使用RawButtons/ ulRawButtons,而且它附带的鼠标驱动程序也没有填充它们。因此,除非您有来自第 3 方供应商的鼠标驱动程序,否则您永远无法设置此字段。

我认为您要使用的是:input.data.mouse.usButtonFlags鼠标单击和input.data.mouse.usButtonData滚轮增量。

于 2013-01-01T19:44:29.093 回答