最終更新:2014-02-27 (木) 20:18:10 (3710d)
WM_INPUT
Top / WM_INPUT
#define WM_INPUT 0x00FF
Raw Input
- http://msdn.microsoft.com/ja-jp/library/bb206183(v=vs.85).aspx
- WM_INPUT メッセージの処理は、WM_MOUSEMOVE メッセージの処理よりも複雑ですが、WM_INPUT メッセージはヒューマン インターフェイス デバイス (HID) スタックから直接読み取られるため、高解像度の結果を反映します。
- WM_INPUTメッセージからマウス移動データを読み取るには、まずデバイスを登録する必要があります。次に、この登録を実行するコードの例を示します。
#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 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]);
次のコードでは、WM_INPUT メッセージが、アプリケーションの WinProc? ハンドラーで処理されます。
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; }
WM_INPUT を使用する長所は、ゲームでマウスからの未処理データを最も低いレベルで取得できる点です。