2

最近、Beginning DirectX 11 Programming (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;
        }
     }
4

1 に答える 1

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;
}

WM_INPUT を使用したマウスの移動で述べたように(記事は非高解像度にも適用されます)。この記事には、WM_MOUSEMOVE の例も含まれています。

于 2013-07-05T21:52:57.007 に答える