我最近开始阅读Beginning DirectX 11编程(Allen Sherrod,Wendy Jones)并且偶然发现了有关输入的问题。本书只教我如何使用Win32,DirectInput和XInput进行输入处理。然而,经过一些研究,我意识到我应该使用RawInput进行输入处理。这就是出现问题的地方。
我已设法启用我的应用程序以接收原始鼠标输入。我的问题是:如何解释原始鼠标数据并在我的游戏中使用,类似于您使用WM_MOUSEMOVE的方式?
编辑:很抱歉自己制定的很糟糕。我想知道鼠标指针在我的应用程序屏幕中的位置,但不了解鼠标原始输入的值。 (mX,mY)
case WM_INPUT:
{
UINT bufferSize;
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &bufferSize, sizeof(RAWINPUTHEADER));
BYTE *buffer = new BYTE[bufferSize];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, (LPVOID)buffer, &bufferSize, sizeof(RAWINPUTHEADER));
RAWINPUT *raw = (RAWINPUT*) buffer;
if ( raw->header.dwType == RIM_TYPEMOUSE)
{
long mX = raw->data.mouse.lLastX;
long mY = raw->data.mouse.lLastY;
}
}
答案 0 :(得分:1)
你可以这样做:
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;
int yPosRelative = raw->data.mouse.lLastY;
}
break;
}
如Mouse movement with WM_INPUT中所述(文章适用于非高清晰度)。本文还包含WM_MOUSEMOVE的示例。