Information and Communication Technology

Information and Communication Technology Laboratory. This Page is Computer Science Research Papers. And it notes the results of the daily survey. I make every effort to write my Paper. However, the mastery of technology is endless. Explore the world of computer science and computer technology with us!
最新の10件
2024-02-07 2024-02-06 2023-12-10 2023-12-09 2023-12-08 2023-12-06 2023-12-02 2023-11-30

参照トップページ

...

マウス入力

 Windowsでは、 左ボタン、右ボタン、ホイールに加えて、 左右サイドボタンの操作を認識します。

マウスの左ボタンは、 ウィジットをポイントしたり、 テキストを選択したり、 ドラッグなどの操作に使用されます。

右ボタンは、 コンテキストメニューを表示するときに使用されます。

ホイールは、 スクロールに使用したり、 中央ボタンとして使用することもできます。

マウスを動かすことによって、 ポイントを動かすことができます。

 左ボタンと右ボタンは、 右利きか左利きかによって、 その役割を逆にできるようになっています。

そのため、 右利きの設定では、 左ボタンを「プライマリボタン」とし、 右ボタンを「セカンダリボタン」としています。

左利きの設定では、 逆になり右ボタンをプライマリボタンとし、 左ボタンをセカンダリボタンとしています。

 マウス操作が行われると、 その操作に応じたメッセージが Windows OS が管理するメッセージキューに格納されます。

そして、 このシステムメッセージキューから、 マウスポインタが指すコントロールのスレッドメッセージキューへポストされます。

アプリケーションは、 メッセージループを用いて、 スレッドメッセージキューにあるメッセージを処理していきます。

●メッセージループ

MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

マウス入力メッセージ

 メッセージは、 フォーカスを取得しているコントロールへ配信されます。

ウィンドウであれば、 マウスポインタがウィンドウの上にあるときに、 マウス操作が行われるとメッセージが配信されます。

また、 ウィンドウ上にマウスポインタを合わせてユーザがマウスボタンをクリックすると、 ウィンドウはフォーカスを取得し、 メッセージの配信が行われます。

マウスのイベントには、以下のようなものがあります

イベント名内容
WM_LBUTTONDOWNマウスの左ボタンが押された
WM_LBUTTONUPマウスの左ボタンが離された
WM_LBUTTONDBLCLKマウスの左ボタンがダブルクリックされた
WM_RBUTTONDOWNマウスの右ボタンが押された
WM_RBUTTONUPマウスの右ボタンが離された
WM_RBUTTONDBLCLKマウスの右ボタンがダブルクリックされた
WM_MBUTTONDOWNマウスの中央ボタンが押された
WM_MBUTTONUPマウスの中央ボタンが離された
WM_MBUTTONDBLCLKマウスの中央ボタンがダブルクリックされた
WM_MOUSEMOVEマウスの移動

[ マウスカーソルの形状 ]

  • Windowsが提供するマウスカーソルの種類には、矢印カーソル、アイビーム(縦棒)カーソル、十字カーソル、砂時計カーソルなどがある。
  • マウスカーソルは、ウィンドウごとに設定できる。
  • ウィンドウクラスの登録で、hCursorメンバに設定したマウスカーソルがデフォルトのカーソルとなる
  • マウスカーソルの設定や変更には、LoadCursor関数、SetCursor関数、およびShowCursor関数が使われる。

[ マウス入力メッセージの種類 ]

  • マウス入力は、メッセージによってプログラムに知らされる。
  • マウス入力メッセージは、クライアント領域のマウス入力メッセージと、非クライアント領域のマウス入力メッセージに大別される
  • 非クライアント領域のマウス入力メッセージは、プログラムの目的に応じて独自の処理を行う。処理しない場合は、デフォルトウィンドウプロシージャに渡す。
  • すべてのマウス入力メッセージのlParamパラメータはマウスの位置を表し、wParamパラメータはマウスのボタンの状態や、[Shift]キーおよび[Ctrl]キーの状態を表す

[ メッセージキューの存在 ]

  • メッセージキューは、Windowsが管理する「先入れ先出し方式」のバッファである
  • Windowsは、メッセージをメッセージキューにいったん格納する。プログラムのメッセージループは、GetMessage関数を使ってメッセージキューの先頭からメッセージを取り出す
  • マウスが移動したときに、メッセージキューにWM_MOUSEMOVEメッセージがあれば、そのwParamパラメータとlParamパラメータが最新の情報に更新される。
  • マウスを早く移動してもメッセージキューがあふれることはないが、マウスが移動した軌跡の情報の一部は失われる。
  • WM_PAINTメッセージ以外で描画を行うことは可能だが、ウィンドウのサイズを変更したときに描画内容が消えてしまう

[ クリック、ダブルクリック、ドラッグ ]

  • マウスの左ボタンをクリックすると、WM_LBUTTONDOWNメッセージとWM_LBUTTONUPメッセージがウィンドウプロシージャに順番に送られる。WM_LBUTTONDOWNメッセージでマウスのクリック処理を行い、WM_LBUTTONUPメッセージは無視してかまわない。
  • WNDCLASSEX構造体のstyleメンバに、CS_DBLCLKSをOR指定した場合は、ダブルクリックによってWM_LBUTTONDOWNメッセージ、WM_LBUTTONUPメッセージ、WM_LBUTTONDBCLKメッセージ、およびWM_LBUTTONUPメッセージが連続して送られる。WM_LBUTTONDBCLKメッセージでマウスのダブルクリック処理を行う。
  • Windowsの仕様により、マウスのダブルクリックの前には、マウスのクリックが行われたとみなされる。
  • マウスのドラッグでは、ボタンを押すことでWM_LBUTTONDOWNメッセージが一回送られ、マウスを移動することで複数のWM_MOUSEMOVEメッセージが送られ、ボタンを離すことでWM_LBUTTONUPメッセージが送られる。 WM_LBUTTONDOWNメッセージでドラッグの対象を選択し、WM_MOUSEMOVEメッセージで其の対象を移動し、WM_LBUTTONUPメッセージで移動先が確定する、という処理を行う。

[ キー入力とのコンビネーション ]

  • マウス入力においては、[Shift]キーや[Ctrl]キーが同時に押されていることに意味がある場合がある。
  • マウス入力メッセージのwParamパラメータとMK_SHIFTやMK_CONTROLでAND演算を行った結果がTRUEなら、[Shift]キーや[Ctrl]キーが押されていることになる
  • Windows標準ユーザーインターフェースと呼ばれる操作性に統一するためには、自分勝手な操作方法を使ってはいけない。

[ マウスのキャプチャ ]

  • すべてのマウス入力メッセージを1つのウィンドウで独占することを「マウスのキャプチャ」と呼ぶ。
  • SetCapture関数を使えばマウスをキャプチャすることができ、ReleaseCapture関数を使えばマウス入力をもとの状態に戻すことができる。
  • マウスのキャプチャは、ドラッグを行うあらゆるプログラムで必須の処理である