我发现下面的帖子对于做我自己的项目非常有用。那么新手问题是:我必须包含什么才能使其发挥作用?
链接: 如何准确测量具有已知 DPI 的鼠标的鼠标移动(以英寸或厘米为单位)
内容:
以下代码注册 RAWINPUTDEVICE,以便可以在 WM_INPUT 中使用它。
RAWINPUTDEVICE Rid[1];
Rid[0].usUsagePage = HID_USAGE_PAGE_GENERIC;
Rid[0].usUsage = HID_USAGE_GENERIC_MOUSE;
Rid[0].dwFlags = RIDEV_INPUTSINK;
Rid[0].hwndTarget = hWnd;
RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]);
Run Code Online (Sandbox Code Playgroud)
以下代码实际上使用 Rid 变量来确定自上次启动 WM_INPUT 以来鼠标移动了多少像素。
case WM_INPUT:
{
UINT dwSize = 40;
static BYTE lpb[40];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT,
lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
int xPosRelative = raw->data.mouse.lLastX; // Could be 1, or could be more than 1
int yPosRelative = raw->data.mouse.lLastY; // Could be 1, or could be more than 1!
}
break;
}
Run Code Online (Sandbox Code Playgroud)
我刚刚找到了。
#include "hidusage.h"
这是它的一些定义
#define HID_USAGE_GENERIC_POINTER ((USAGE) 0x01)
#define HID_USAGE_GENERIC_MOUSE ((USAGE) 0x02)
#define HID_USAGE_GENERIC_JOYSTICK ((USAGE) 0x04)
#define HID_USAGE_GENERIC_GAMEPAD ((USAGE) 0x05)
#define HID_USAGE_GENERIC_KEYBOARD ((USAGE) 0x06)
#define HID_USAGE_GENERIC_KEYPAD ((USAGE) 0x07)
#define HID_USAGE_GENERIC_SYSTEM_CTL ((USAGE) 0x80)
typedef USHORT USAGE,*PUSAGE;
Run Code Online (Sandbox Code Playgroud)
小智 -1
您需要包含 windows.h
...还必须定义 HID_USAGE_PAGE_GENERIC 和 HID_USAGE_GENERIC_MOUSE。
参见MSDN..
#ifndef HID_USAGE_PAGE_GENERIC
#define HID_USAGE_PAGE_GENERIC ((USHORT) 0x01)
#endif
#ifndef HID_USAGE_GENERIC_MOUSE
#define HID_USAGE_GENERIC_MOUSE ((USHORT) 0x02)
#endif
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-gb/library/windows/desktop/ee418864%28v=vs.85%29.aspx