Windows フォームにおけるマウス入力のしくみ
更新 : 2007 年 11 月
マウス入力の受け取りと処理は、どの Windows アプリケーションでも重要です。マウス イベントを処理してアプリケーションのアクションを実行したり、マウスの位置情報を使用してヒット テストなどのアクションを実行したりできます。また、アプリケーションのコントロールがマウス入力を処理する方法を変更することもできます。ここでは、マウス イベントの詳細と、マウスのシステム設定を取得して変更する方法について説明します。マウス イベントで提供されるデータおよびマウスのクリック イベントの発生順序の詳細については、「Windows フォームにおけるマウス イベント」を参照してください。
マウスの位置とヒット テスト
ユーザーがマウスを動かすと、オペレーティング システムによってマウス ポインタが移動します。マウス ポインタには "ホット スポット" と呼ばれる単一ピクセルの領域が含まれます。オペレーティング システムは、この領域を追跡することによってポインタの位置を認識します。ユーザーがマウスを動かすか、マウス ボタンを押すと、HotSpot を含む Control が適切なマウス イベントを発生させます。現在のマウスの位置を取得するには、マウス イベントの処理時に MouseEventArgs の Location プロパティを使用するか、Cursor クラスの Position プロパティを使用します。その後、マウスの位置情報を使用してヒット テストを実行し、マウスの位置に基づいてアクションを実行できます。ヒット テスト機能は、Windows フォームの複数のコントロール (ListView、TreeView、MonthCalendar、および DataGridView) に組み込まれています。ヒット テストを適切なマウス イベント (たとえば、MouseHover など) と組み合わせて使用すると、特定のアクションをアプリケーションがいつ実行するかを決定する上で便利です。
マウス イベント
マウス入力に応答する主な方法は、マウス イベントを処理することです。マウス イベントの一覧と各マウス イベントの発生タイミングを次の表に示します。
マウス イベント |
説明 |
---|---|
このイベントは、マウス ボタンが離されると発生します。通常は、MouseUp イベントの前に発生します。このイベントのハンドラは、EventArgs 型の引数を受け取ります。クリックがいつ発生したかだけを判断する必要がある場合は、このイベントを処理します。 |
|
このイベントは、ユーザーがマウスでコントロールをクリックすると発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。クリック発生時のマウスに関する情報を取得する必要がある場合は、このイベントを処理します。 |
|
このイベントは、コントロールがダブルクリックされると発生します。このイベントのハンドラは、EventArgs 型の引数を受け取ります。ダブルクリックがいつ発生したかだけを判断する必要がある場合は、このイベントを処理します。 |
|
このイベントは、ユーザーがマウスでコントロールをダブルクリックすると発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。ダブルクリック発生時のマウスに関する情報を取得する必要がある場合は、このイベントを処理します。 |
|
このイベントは、マウス ポインタがコントロール上にあるときに、ユーザーがマウス ボタンを押すと発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。 |
|
このイベントは、コントロールの種類に応じて、マウス ポインタがコントロールの境界またはクライアント領域に入ると発生します。このイベントのハンドラは、EventArgs 型の引数を受け取ります。 |
|
このイベントは、マウス ポインタがコントロール上で停止したままになると発生します。このイベントのハンドラは、EventArgs 型の引数を受け取ります。 |
|
このイベントは、コントロールの種類に応じて、マウス ポインタがコントロールの境界またはクライアント領域から出ると発生します。このイベントのハンドラは、EventArgs 型の引数を受け取ります。 |
|
このイベントは、マウス ポインタがコントロール上にあるときに移動すると発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。 |
|
このイベントは、マウス ポインタがコントロール上にあるときに、ユーザーがマウス ボタンを離すと発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。 |
|
このイベントは、コントロールにフォーカスがあるときに、ユーザーがマウス ホイールを回転させると発生します。このイベントのハンドラは、MouseEventArgs 型の引数を受け取ります。MouseEventArgs の Delta プロパティを使用して、マウスでどれだけスクロールしたかを判断できます。 |
マウス入力の変更とシステム設定の検出
コントロールがマウス入力を処理する方法を検出して変更するには、コントロールから派生させ、GetStyle メソッドと SetStyle メソッドを使用します。SetStyle メソッドは、ControlStyles 値のビットごとの組み合わせを受け取り、コントロールが標準のクリック動作とダブルクリック動作のどちらを行うか、またはコントロールが独自のマウス処理を行うかどうかを決定します。また、SystemInformation クラスは、マウスの機能を記述したプロパティを含み、マウスとオペレーティング システムの対話方法を指定します。これらのプロパティの概要を次の表に示します。
プロパティ |
説明 |
---|---|
2 回のクリックがオペレーティング システムによってダブルクリックであると認識されるために、ユーザーが 2 回クリックする必要がある領域の大きさ (ピクセル単位) を取得します。 |
|
オペレーティング システムによってマウス操作がダブルクリックであると認識されるための、1 回目のクリックと 2 回目のクリックの間の最大経過時間 (ミリ秒単位) を取得します。 |
|
マウスのボタンの数を取得します。 |
|
左右のマウス ボタンの機能が入れ替わっているかどうかを示す値を取得します。 |
|
マウス静止メッセージが生成されるためにマウス静止時間が経過するまでマウス ポインタをとどめておく必要がある四角形の領域の大きさ (ピクセル単位) を取得します。 |
|
マウス静止メッセージが生成されるために静止領域内にマウス ポインタをとどめておく必要がある時間 (ミリ秒単位) を取得します。 |
|
マウスが取り付けられているかどうかを示す値を取得します。 |
|
現在のマウス速度を示す値 (1 ~ 20) を取得します。 |
|
マウス ホイール付きのマウスが取り付けられているかどうかを示す値を取得します。 |
|
マウス ホイールの 1 目盛りの回転で増分される差分値を取得します。 |
|
マウス ホイールを回転したときにスクロールする行数を取得します。 |