次の方法で共有


RAWMOUSE 構造体 (winuser.h)

マウスの状態に関する情報が含まれています。

構文

typedef struct tagRAWMOUSE {
  USHORT usFlags;
  union {
    ULONG ulButtons;
    struct {
      USHORT usButtonFlags;
      USHORT usButtonData;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  ULONG  ulRawButtons;
  LONG   lLastX;
  LONG   lLastY;
  ULONG  ulExtraInformation;
} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;

メンバーズ

usFlags

型: USHORT

マウスの状態。 このメンバーは、次の任意の妥当な組み合わせにすることができます。

価値 意味
MOUSE_MOVE_RELATIVE
0x00
マウスの移動データは、最後のマウス位置を基準にしています。 マウスの動きの詳細については、次の「解説」セクションを参照してください。
MOUSE_MOVE_ABSOLUTE
0x01
マウスの移動データは絶対位置に基づいています。 マウスの動きの詳細については、次の「解説」セクションを参照してください。
MOUSE_VIRTUAL_DESKTOP
0x02
マウス座標は仮想デスクトップにマップされます (複数のモニター システムの場合)。 マウスの動きの詳細については、次の「解説」セクションを参照してください。
MOUSE_ATTRIBUTES_CHANGED
0x04
マウス属性が変更されました。アプリケーションはマウス属性のクエリを実行する必要があります。
MOUSE_MOVE_NOCOALESCE
0x08
このマウス移動イベントは結合されませんでした。 マウスの移動イベントは、既定で結合できます。
Windows XP/2000: この値はサポートされていません。

DUMMYUNIONNAME

DUMMYUNIONNAME.ulButtons

型: ULONG

引っ込み思案。

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonFlags

型: USHORT

マウス ボタンの遷移状態。 このメンバーには、次の値のうち 1 つ以上を指定できます。

価値 意味
RI_MOUSE_BUTTON_1_DOWN
RI_MOUSE_LEFT_BUTTON_DOWN
0x0001
左ボタンが下に変更されました。
RI_MOUSE_BUTTON_1_UP
RI_MOUSE_LEFT_BUTTON_UP
0x0002
左ボタンが上に変更されました。
RI_MOUSE_BUTTON_2_DOWN
RI_MOUSE_RIGHT_BUTTON_DOWN
0x0004
右ボタンが下に変更されました。
RI_MOUSE_BUTTON_2_UP
RI_MOUSE_RIGHT_BUTTON_UP
0x0008
右ボタンが上に変更されました。
RI_MOUSE_BUTTON_3_DOWN
RI_MOUSE_MIDDLE_BUTTON_DOWN
0x0010
中央ボタンが下に変更されました。
RI_MOUSE_BUTTON_3_UP
RI_MOUSE_MIDDLE_BUTTON_UP
0x0020
中央ボタンが上に変更されました。
RI_MOUSE_BUTTON_4_DOWN
0x0040
XBUTTON1ダウンに変更されました。
RI_MOUSE_BUTTON_4_UP
0x0080
XBUTTON1が up に変更されました。
RI_MOUSE_BUTTON_5_DOWN
0x0100
XBUTTON2ダウンに変更されました。
RI_MOUSE_BUTTON_5_UP
0x0200
XBUTTON2が up に変更されました。
RI_MOUSE_WHEEL
0x0400
生の入力はマウス ホイールから取得されます。 ホイールデルタは usButtonDataに格納されます。
正の値は、ホイールがユーザーから離れて前方に回転したことを示します。負の値は、ホイールがユーザーに向かって後方に回転したことを示します。 詳細については、次の「解説」セクションを参照してください。
RI_MOUSE_HWHEEL
0x0800
生の入力は、水平マウス ホイールから取得されます。 ホイールデルタは usButtonDataに格納されます。
正の値は、ホイールが右に回転したことを示します。負の値は、ホイールが左に回転したことを示します。 詳細については、次の「解説」セクションを参照してください。
Windows XP/2000: この値はサポートされていません。

DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonData

型: USHORT

usButtonFlags RI_MOUSE_WHEEL または RI_MOUSE_HWHEELがある場合、このメンバーはホイールが回転する距離を指定します。 詳細については、次の「解説」セクションを参照してください。

ulRawButtons

型: ULONG

マウス ボタンの生の状態。 Win32 サブシステムはこのメンバーを使用しません。

lLastX

型: long

X 方向のモーション。 これは、usFlagsの値に応じて、相対モーションまたは絶対モーション 符号付きです。

lLastY

型: long

Y 方向のモーション。 これは、usFlagsの値に応じて、相対モーションまたは絶対モーション 符号付きです。

ulExtraInformation

型: ULONG

イベントの追加のデバイス固有の情報。 詳細については、「ペン入力とマウスとタッチの の区別」を参照してください。

備考

マウスが移動した場合(MOUSE_MOVE_RELATIVE または MOUSE_MOVE_ABSOLUTEで示されます)、lLastX を し、lLastY を 、その動きに関する情報を指定します。 この情報は、相対整数値または絶対整数値として指定されます。

MOUSE_MOVE_RELATIVE 値が指定されている場合は、lLastX を し、lLastY 前のマウス イベント (最後に報告された位置) に対する相対移動を指定します。 正の値は、マウスが右 (または下) に移動した場合を意味します。負の値は、マウスが左 (または上) に移動した場合を意味します。

MOUSE_MOVE_ABSOLUTE 値が指定されている場合は、lLastXlLastY 0 から 65,535 の間の正規化された絶対座標が含まれます。 座標 (0,0) は、表示サーフェスの左上隅にマップされます。座標 (65535,65535) が右下隅にマップされます。 マルチモニター システムでは、座標はプライマリ モニターにマップされます。

MOUSE_MOVE_ABSOLUTEに加えて MOUSE_VIRTUAL_DESKTOP を指定すると、座標は仮想デスクトップ全体にマップされます。

case WM_INPUT:
{
    UINT dwSize = sizeof(RAWINPUT);
    static BYTE lpb[sizeof(RAWINPUT)];

    GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));

    RAWINPUT* raw = (RAWINPUT*)lpb;

    if (raw->header.dwType == RIM_TYPEMOUSE)
    {
        RAWMOUSE& mouse = raw->data.mouse;

        if (mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
        {
            RECT rect;
            if (mouse.usFlags & MOUSE_VIRTUAL_DESKTOP)
            {
                rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
                rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
                rect.right = GetSystemMetrics(SM_CXVIRTUALSCREEN);
                rect.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN);
            }
            else
            {
                rect.left = 0;
                rect.top = 0;
                rect.right = GetSystemMetrics(SM_CXSCREEN);
                rect.bottom = GetSystemMetrics(SM_CYSCREEN);
            }

            int absoluteX = MulDiv(mouse.lLastX, rect.right, USHRT_MAX) + rect.left;
            int absoluteY = MulDiv(mouse.lLastY, rect.bottom, USHRT_MAX) + rect.top;
            ...
        }
        else if (mouse.lLastX != 0 || mouse.lLastY != 0)
        {
            int relativeX = mouse.lLastX;
            int relativeY = mouse.lLastY;
            ...
        }
        ...
    }

    return 0;
}

従来の WM_MOUSEMOVE ウィンドウ メッセージとは異なり、生入力マウス イベントは、コントロール パネルの [マウスのプロパティ] シートで設定されたマウス速度の影響 受け取りません。 詳細については、「マウス入力の概要」 を参照してください。

usButtonFlagsRI_MOUSE_WHEEL または RI_MOUSE_HWHEEL によって示されるマウス ホイールが移動された場合、usButtonData には、ホイールが回転する距離を指定する符号付き 短い 値が含まれます。

ホイールの回転は、120 に設定された WHEEL_DELTAの倍数になります。 これはアクションを実行するためのしきい値であり、デルタごとに 1 つのアクション (たとえば、1 つの増分のスクロール) が発生する必要があります。

デルタは 120 に設定され、Microsoft や他のベンダーは、より細かい解像度のホイール (切り欠きのない自由に回転するホイール) を構築して、回転ごとにメッセージを送信できますが、各メッセージの値は小さくなります。 この機能を使用するには、WHEEL_DELTA に達するまで受信デルタ値を追加するか (デルタ ローテーションの場合は同じ応答を取得します)、より頻繁なメッセージに応答して部分的な行をスクロールします。 スクロールの粒度を選択し、デルタに達するまで差分を累積することもできます。

アプリケーションでは、SPI_GETWHEELSCROLLLINES または SPI_GETWHEELSCROLLCHARS パラメーターを使用して、SystemParametersInfo API を使用して、現在の行からスクロール、および文字からスクロールまでのユーザー設定を取得することもできます。

このようなホイール処理コードの例を次に示します。

RAWMOUSE& mouse = raw->data.mouse;

if ((mouse.usButtonFlags & RI_MOUSE_WHEEL) || (mouse.usButtonFlags & RI_MOUSE_HWHEEL))
{
    short wheelDelta = (short)mouse.usButtonData;
    float scrollDelta = (float)wheelDelta / WHEEL_DELTA;

    if (mouse.usButtonFlags & RI_MOUSE_HWHEEL) // Horizontal
    {
        unsigned long scrollChars = 1; // 1 is the default
        SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
        scrollDelta *= scrollChars;
        ...
    }
    else // Vertical
    {
        unsigned long scrollLines = 3; // 3 is the default
        SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
        if (scrollLines != WHEEL_PAGESCROLL)
            scrollDelta *= scrollLines;
        ...
    }
}

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ヘッダー winuser.h (Windows.h を含む)

関連項目

概念

GetRawInputDeviceInfo の

RAWINPUT の

生入力 を する

リファレンス

MOUSEINPUT 構造体

SendInput 関数 を する

MOUSE_INPUT_DATA 構造体の

マウス入力の概要 (レガシ)

マウス入力通知 (レガシ)

SystemParametersInfo