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関数を使えばマウス入力をもとの状態に戻すことができる。
- マウスのキャプチャは、ドラッグを行うあらゆるプログラムで必須の処理である