マウスの使用の概要 (Windows フォーム .NET)

マウス入力の受信と処理は、すべての Windows アプリケーションの重要な部分です。 マウス イベントを処理してアプリケーションでアクションを実行したり、マウスの位置情報を使用してヒット テストやその他のアクションを実行したりすることができます。 また、アプリケーションのコントロールでマウス入力を処理する方法も変更できます。 この記事では、これらのマウス イベントの詳細と、マウスのシステム設定を取得して変更する方法について説明します。

Windows フォームでは、ユーザー入力は、Windows メッセージの形式でアプリケーションに送信されます。 一連のオーバーライド可能なメソッドにより、これらのメッセージは、アプリケーション、フォーム、コントロールのレベルで処理されます。 これらのメソッドにより、マウス メッセージが受信されると、マウス入力に関する情報を取得するために処理できるイベントが発生します。 多くの場合、Windows フォーム アプリケーションは、これらのイベントに対処するだけで、すべてのユーザー入力を処理できます。 それ以外の場合は、アプリケーション、フォーム、またはコントロールが受信する前に、メッセージを処理するメソッドの 1 つをオーバーライドして、特定のメッセージを受け取ることができます。

マウス イベント

すべての Windows フォーム コントロールは、マウスおよびキーボード入力に関連する一連のイベントを継承します。 たとえば、コントロールは MouseClick イベントを処理して、マウス クリックの位置を判断できます。 マウス イベントの詳細については、「マウス イベントの使用」を参照してください。

マウスの位置とヒットテスト

ユーザーがマウスを動かすと、オペレーティング システムによってマウス ポインターが移動します。 マウス ポインターには、ホット スポットと呼ばれる 1 つのピクセルが含まれています。これをオペレーティング システムがポインターの位置として追跡し、認識します。 ユーザーがマウスを動かすか、マウス ボタンを押すと、HotSpot を含む Control によって適切なマウス イベントが発生します。

マウス イベントを処理するか、または Cursor クラスの Position プロパティを使用すると、MouseEventArgsLocation プロパティで、現在のマウス位置を取得できます。 マウスの位置情報を使用してヒットテストを実行し、マウスの位置に基づいてアクションを実行できます。 ヒットテスト機能は、ListViewTreeViewMonthCalendarDataGridView コントロールなどの Windows フォームのいくつかのコントロールに組み込まれています。

ヒットテストは、MouseHover などの適切なマウスイベントと共に使用され、アプリケーションが特定のアクションを実行する必要があるかどうかを判断するのに非常に役立ちます。

マウスの入力設定の変更

コントロールがマウス入力を処理する方法は、コントロールから派生させ、GetStyleSetStyle のメソッドを使用することで検出して変更することができます。 SetStyle メソッドは、ControlStyles 値のビットごとの組み合わせを取得して、コントロールに標準のクリック、ダブルクリックの動作が含まれるかどうか、またはコントロールにより独自のマウス処理が対処されるかどうかを決定します。 さらに、SystemInformation クラスには、マウスの機能を説明し、マウスがオペレーティング システムとどのように対話するかを指定するプロパティが含まれています。 次の表に、これらのプロパティを要約します。

プロパティ 説明
DoubleClickSize 2 回のクリックがダブルクリックであるとオペレーティング システムに認識されるために、ユーザーがクリックする 2 つの位置が含まれている必要がある範囲のサイズ (ピクセル単位) を取得します。
DoubleClickTime マウスのアクションがダブルクリックであると認識されるための、1 回目のクリックと 2 回目のクリックの間の最大経過時間 (ミリ秒単位) を取得します。
MouseButtons マウスのボタンの数を取得します。
MouseButtonsSwapped 左右のマウス ボタンの機能が入れ替わっているかどうかを示す値を取得します。
MouseHoverSize マウス静止メッセージが生成されるためにマウス静止時間が経過するまでマウス ポインターをとどめておく必要がある四角形の領域のサイズ (ピクセル単位) を取得します。
MouseHoverTime マウス静止メッセージが生成されるために静止領域内にマウス ポインターをとどめておく必要がある時間 (ミリ秒単位) を取得します。
MousePresent マウスが取り付けられているかどうかを示す値を取得します。
MouseSpeed 現在のマウスの速度を示す値 (1 から 20) を取得します。
MouseWheelPresent マウス ホイール付きのマウスが取り付けられているかどうかを示す値を取得します。
MouseWheelScrollDelta マウス ホイールの 1 目盛りの回転で増分される差分値を取得します。
MouseWheelScrollLines マウス ホイールを回転したときにスクロールする行数を取得します。

ユーザー入力メッセージを処理するメソッド

フォームとコントロールは、IMessageFilter インターフェイス、およびメッセージ キュー内のさまざまなポイントで Windows メッセージを処理するオーバーライド可能なメソッドのセットにアクセスできます。 これらのメソッドにはすべて、Windows メッセージの下位レベルの詳細をカプセル化する Message パラメーターが含まれています。 これらのメソッドを実装またはオーバーライドしてメッセージを確認し、メッセージを使用するか、またはメッセージ キュー内の次のコンシューマーに渡すことができます。 次の表に、Windows フォームのすべての Windows メッセージを処理するメソッドを示します。

メソッド メモ
PreFilterMessage このメソッドにより、キューに登録済み (ポスト済みとも呼ばれる) の Windows メッセージはアプリケーション レベルでインターセプトされます。
PreProcessMessage このメソッドにより、Windows メッセージが、処理される前に、フォームおよびコントロール レベルでインターセプトされます。
WndProc このメソッドにより、Windows メッセージはフォームおよびコントロール レベルで処理されます。
DefWndProc このメソッドにより、Windows メッセージの既定の処理はフォームおよびコントロール レベルで実行されます。 これにより、Windows の最小限の機能が提供されます。
OnNotifyMessage このメソッドは、メッセージを、それが処理された後にフォームとコントロール レベルで受け取ります。 このメソッドが呼び出されるようにするには、EnableNotifyMessage スタイルのビットを設定する必要があります。

関連項目