No.1ベストアンサー
- 回答日時:
00000000 wpの値 (2進数表記)
00000001 MK_LBUTTON (2進数表記)
------------------------------------
00000000 ANDの結果 (2進数表記)
AND演算なので、お互いの各ビットが1でなければ、そのビットは0になります。
マウスの左ボタンが押されたなら、wpに値が入るので、
00000001 wpの値 (2進数表記)
00000001 MK_LBUTTON (2進数表記)
------------------------------------
00000001 ANDの結果 (2進数表記)
となります。
マウスの右ボタンが押されたなら、
00000010 wpの値 (2進数表記)
00000010 MK_RBUTTON (2進数表記)
------------------------------------
00000010 ANDの結果 (2進数表記)
となります。
なぜAND演算するかと言うと、
マウスの左ボタンと右ボタンが両方押されているような場合は、
wpの値が0x03(二進数表記で0011)に
なりますよね(wp = MK_LBUTTON | K_RBUTTON;)。
そういう状況で“右ボタンが押されているかだけ調べたい”場合に、
00000011 wpの値 (2進数表記)
00000010 MK_RBUTTON (2進数表記)
------------------------------------
00000010 ANDの結果 (2進数表記)
とすると、右ボタンのビットだけを判定出来る(=右ボタンが押されたか分かる)のです。
この手法は『ビットマスク』といって、プログラマの常識的テクニックなので、『ビットマスク』で色々検索してマスターしてくださいね。
すばやく、詳しい丁寧な解説ありがとうございます。
なんとなくイメージがつかめました!
ありがとうございます!
>この手法は『ビットマスク』といって、プログラマの常識的テクニックなので、『ビットマスク』で色々検索してマスターしてくださいね。
これは常識的なテクニックというのは、勉強になりました。
いろいろありがとうございます!
No.2
- 回答日時:
★startover さんは『Win32 API入門』のサイトを知っているのかな?
・もしも、知っているとすると『40.マウスの移動を処理』の『case WM_MOUSEMOVE:』部分の
質問ですよね。→多分。
・そうなると『39.マウスメッセージ』のページで『WM_MOUSEMOVE』メッセージの『WPARAM』
引数について解説されていますよ。
つまり『MK_LBUTTON』定数でマウスの左ボタンの押されている状態を AND 処理でビットの
チェックをしているのです。→ビットマスクについては回答者 No.1 さんが詳しく解説して
くれているので参照して下さい。
・それで『WM_MOUSEMOVE』メッセージの『WPARAM』引数については
http://wisdom.sakura.ne.jp/system/winapi/windata …→『メッセージ一覧』の下の方に
ある『キーフラグ』か、
http://wisdom.sakura.ne.jp/system/winapi/win32/w …→『39.マウスメッセージ』の
定数部分を参照して下さい。
最後に:
・この質問の回答としましては、ウインドウのクライアント領域にマウスを移動したときに
『左ボタン』が押されていたらば、LPARAM 引数(lp)から横軸を『LOWORD』マクロで取得、
縦軸を『HIWORD』マクロで取得しています。
・つまり、マウスのドラッグ移動中の座標を『x』、『y』変数に代入していることになります。
その後、『WM_PAINT』メッセージでドラッグ移動中の座標位置に『円(点)』を描画している
ようです。
・以上。おわり。
リンク:
・http://wisdom.sakura.ne.jp/system/winapi/win32/w …→『39.マウスメッセージ』
・http://wisdom.sakura.ne.jp/system/winapi/win32/w …→『40.マウスの移動を処理』
・http://wisdom.sakura.ne.jp/system/winapi/windata …→『メッセージ一覧』
参考URL:http://wisdom.sakura.ne.jp/system/winapi/win32/i …
すばやい回答ありがとうございます!
そうです!そのサイトからコピペして来ました!
メッセージ一覧というのがあったんですね!
気がつきませでした。
プログラムの流れも教えていただきましてありがとうございます!
丁寧に教えていただきどうもありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- タクシー mkの予約 1 2023/04/08 23:33
- タクシー タクシー予約 2 2023/04/09 15:17
- その他(趣味・アウトドア・車) 【 機動戦士ガンダムZZ 】 ドーベンウルフの原型機はガンダムMk-5ですがドーベンウルフはガンダム 1 2022/07/02 00:02
- バス・高速バス・夜行バス 大阪芸術大学のバスはMK株式会社のバスですか? 1 2023/02/18 00:13
- 物理学 この問題について式と回答を教えていただきたいです。 ( a)は多分ですけどma=fを両方で立てて解く 3 2023/04/05 06:58
- Excel(エクセル) EXCELのif文をifs文に変換したい 1 2022/09/22 16:42
- 哲学 ロシア正教と日蓮宗、格好で比べればどちらが上ですか? 5 2023/01/10 20:24
- Excel(エクセル) IFERROR(IF()IF())のような形の構文が作れません 2 2023/02/05 17:51
- 超常現象・オカルト 不正選挙や自作自演テロや人工地震や気象操作やエシュロンやMKウルトラや邪悪な異星人等々 2 2022/07/01 21:08
- 会計ソフト・業務用ソフト Excel IF構文内の計算式を有効にする方法 2 2023/03/22 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
ボタンをマウスで押し続けたと...
-
コマンドボタンやイメージにマ...
-
[Excel VBA]コマンドボタンの入...
-
バックスペース機能の作り方
-
if(wp & MK_ LBUTTON)
-
Excel VBA Application.caller...
-
Delphiにて、呼び元の情報を(...
-
コマンドボタンの長押し
-
VBA IE通知バーの制御 バー内の...
-
VB.NETでマウスクリックイベン...
-
ボタン
-
マルチページで現在開いている...
-
Button(コントロール)を半透明...
-
ダウンロードダイアログをVB...
-
button をクリックしてもへこま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
プロシージャからイベントをコ...
-
他のアプリケーションとの連携
-
閉じると「+」になり開くと「-...
-
C#で動的に作ったtextboxを消す。
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
ボタン
-
CommandButtonのCaptionを変化...
-
TextBoxでEnterキーを押すと、...
-
VB.net でトグルボタンを実現し...
おすすめ情報