最終更新:2014-02-27 (木) 20:18:10 (3700d)  

WM_INPUT
Top / WM_INPUT

#define WM_INPUT                        0x00FF

Raw Input

  • 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 を使用する長所は、ゲームでマウスからの未処理データを最も低いレベルで取得できる点です。

関連