WM_MOUSEWHEEL メッセージ

マウス ホイールが回転するとフォーカス ウィンドウに送信されます。 DefWindowProc 関数を使用すると、ウィンドウの親にメッセージが伝達されます。 メッセージは、処理を行うウィンドウが検出されるまで親チェーンで DefWindowProc によって伝達されるため、内部転送されません。

ウィンドウは、WindowProc 関数を介してこのメッセージを受け取ります。

#define WM_MOUSEWHEEL                   0x020A

パラメーター

wParam

上位ワードは、ホイールが回転する距離を示します。これは、WHEEL_DELTA の倍数または除算で表され、120 となっています。 正の値は、ホイールがユーザーより前方に回転したことを示します。負の値は、ユーザーに向かってホイールが後方に回転したことを示します。

下位ワードは、さまざまな仮想キーが押されているかどうかを示します。 このパラメーターには、次の値のいずれかを指定できます。

Value 意味
MK_CONTROL
0x0008
CTRL キーが押されています。
MK_LBUTTON
0x0001
マウスの左ボタンが押されています。
MK_MBUTTON
0x0010
マウスの中央ボタンが押されています。
MK_RBUTTON
0x0002
マウスの右ボタンが押されています。
MK_SHIFT
0x0004
Shift キーが押されています。
MK_XBUTTON1
0x0020
最初の X ボタンが押されています。
MK_XBUTTON2
0x0040
2 つ目の X ボタンが押されています。

lParam

下位ワードによって、ポインターの x 座標が画面の左上隅を基準に指定されます。

上位ワードによって、ポインターの y 座標が画面の左上隅を基準に指定されます。

戻り値

アプリケーションでこのメッセージを処理する場合は、0 を返す必要があります。

解説

wParam パラメーターの情報を取得するには、次のコードを使用します。

fwKeys = GET_KEYSTATE_WPARAM(wParam);
zDelta = GET_WHEEL_DELTA_WPARAM(wParam);

水平方向と垂直方向の位置を取得するには、次のコードを使用します。

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 

前述のように、x 座標は戻り値の下位 short になり、y 座標は上位 short になります (複数のモニターを持つシステムでは負の値を取ることができるため、両方とも "符号付き" の値を表します)。 戻り値が変数に割り当てられている場合は、MAKEPOINTS マクロを使用して戻り値から POINTS 構造体を取得できます。 また、GET_X_LPARAM マクロまたは GET_Y_LPARAM マクロを使用して、x 座標または y 座標を抽出することもできます。

重要

LOWORD マクロまたは HIWORD マクロを使ってカーソル位置の x 座標と y 座標を抽出しないでください。これらのマクロは、複数のモニターを持つシステム上で正しくない結果を返します。 複数のモニターを備えたシステムでは、負の x 座標と y 座標が存在する可能性があります。また、LOWORDHIWORD によって、座標が符号なし数量として扱われます。

ホイールの回転は、WHEEL_DELTA の倍数であり、120 に設定されています。 これは、実行されるアクションのしきい値であり、そのようなアクション (例: 1 インクリメントずつスクロール) は、デルタごとに 1 つ発生するはずです。

デルタは、120 に設定されていました。これは、Microsoft やその他のベンダーが、各メッセージの値を小さく抑えながら 1 回転ごとに送信できるメッセージ数を増やすために、より細かな解像度のホイール (ノッチがなく、自由に回転するホイール) を構築できるようにするためです。 この機能を使用するには、WHEEL_DELTA に到達するまで受信デルタ値を追加するか (デルタ回転の場合は同じ応答が得られます)、より頻繁なメッセージに応答して一部の行をスクロールします。 また、スクロールの粒度を選択し、デルタに到達するまでデルタを累積することもできます。

MSH_MOUSEWHEEL には fwKeys がないことに注意してください。 それ以外の場合、パラメーターは WM_MOUSEWHEEL とまったく同じです。

埋め込みオブジェクトまたはコントロールへの MSH_MOUSEWHEEL の転送は、アプリケーション次第です。 アクティブな埋め込み OLE アプリケーションにメッセージを送信するには、アプリケーションが必要です。 フォーカスがあるホイール対応コントロールへのアプリケーションによる送信は、必須ではありません。 アプリケーションでメッセージをコントロールに送信する場合は、戻り値をチェックすると、メッセージが処理されたかどうかを確認できます。 コントロールでメッセージを処理する場合、TRUE の値を返すには、コントロールが必要です。

要件

要件 Value
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winuser.h (Windowsx.h を含む)

関連項目

リファレンス

GET_KEYSTATE_WPARAM

GET_X_LPARAM

GET_Y_LPARAM

GET_WHEEL_DELTA_WPARAM

HIWORD

LOWORD

mouse_event

Conceptual

マウス入力

その他のリソース

GetSystemMetrics

MAKEPOINTS

POINTS

SystemParametersInfo