マウスの右クリックを押している間にマウスホイールを判別するには?

解決


yoshi  2005-08-10 11:36:57  No: 58581

プログラムに関してほとんど無知なので迷惑かけてしまうと思いますが^^;
マウスの右クリックを押している間にマウスホイールを動かす事で、複数のウインドウを開いている時、手前のウインドウが一番奥へ、またホイールを逆に回すと一番奥のウインドウが一番手前へ移動するようなプログラムを組んでみたいのですが・・・
どなたか教えていただけませんか・・・
最初に右クリックを押している間にマウスホイールが何か行動を起こす、というものを作成したいのですが。


dairygoods  2005-08-10 18:16:51  No: 58582

yoshi さんが、どの部分で躓いているのか分からないので、要点だけ。
・ホイールのイベント WM_MOUSEWHEEL
・右ボタンの状態 GetAsyncKeyState(VK_RBUTTON)


YuO  2005-08-10 20:13:53  No: 58583

> ・右ボタンの状態 GetAsyncKeyState(VK_RBUTTON)

((LOWORD(wParam) & MK_RBUTTON) == MK_RBUTTON)
の方がよいかと。


yoshi  2005-08-12 09:40:37  No: 58584

お返事ありがとうございます!
右クリックだけで何かをするようなプログラムは、参考書の通りに打てばできたりするのですが、右クリックを押してさらにその状態のままホイールを動かすと言う部分で躓いています^^;
右クリックをするだけなら
case WM_RBUTTONDOWN:
      〜〜〜〜〜
      break;
で動くのですが・・・ホイールの部分をどうしたらよいものかと・・・
上の「〜〜〜〜〜」部分にWM_MOUSEWHEELを入れるとなにやらエラーが出ました・・・
if文の中でif文を作るのとは違う感覚なのでしょうか^^;

えぇっと、((LOWORD(wParam) & MK_RBUTTON) == MK_RBUTTON)  は右ボタンの状態ですか・・・
この辺りが全然理解できてないみたいです^^;
ボタンを押しながら、と言う概念があやふやですね・・・
参考書になかったのでネットでも調べてみたのですがよく分からないです・・・
教えていただけませんか^^;


YuO  2005-08-12 12:37:15  No: 58585

> 右クリックだけで何かをするようなプログラムは、参考書の通りに打てばできたりするのですが、右クリックを押してさらにその状態のままホイールを動かすと言う部分で躓いています^^;

参考書の通りに打てば,というレベルであれば,
次に参考書のコードを理解することをしなければなりません。

参考書には,メッセージの仕組みについての記述がなかったですか?
# メッセージの仕組みについての記述のないWin32 API入門書なんて捨てていいような……。

> 上の「〜〜〜〜〜」部分にWM_MOUSEWHEELを入れるとなにやらエラーが出ました・・・
> if文の中でif文を作るのとは違う感覚なのでしょうか^^;

メッセージの仕組みを勉強してください。
WM_MOUSEWHEELが何物かちゃんと理解していれば,
どこに書けばいいのかがわかるはずです。

> えぇっと、((LOWORD(wParam) & MK_RBUTTON) == MK_RBUTTON)  は右ボタンの状態ですか・・・
> この辺りが全然理解できてないみたいです^^;

WM_MOUSEWHEELメッセージが送られてきたときに付随して送られてくる情報をチェックしています。
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_mousewheel.asp

> ボタンを押しながら、と言う概念があやふやですね・・・
> 参考書になかったのでネットでも調べてみたのですがよく分からないです・・・


てつや  2005-08-12 18:48:35  No: 58586

>右クリックだけで何かをするようなプログラムは、参考書の通りに打てばできたりするのですが、
>右クリックを押してさらにその状態のままホイールを動かすと言う>部分で躓いています^^;
発想を逆にして、マウスホイール時にマウスの右ボタンが押されていたら...
と考えてください。すると皆さんの言っていることがわかると思います。


てつや  2005-08-12 18:57:44  No: 58587

あと以下のようにありますので、
#define _WIN32_WINNT 0x0400
としないとWM_MOUSEWHEELがエラーになります。

#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
#define WM_MOUSEWHEEL                   0x020A
#define WM_MOUSELAST                    0x020A
#else
#define WM_MOUSELAST                    0x0209
#endif /* if (_WIN32_WINNT < 0x0400) */


yoshi  2005-08-15 12:18:33  No: 58588

YuOさん、てつやさん、ありがとうございます。
逆の発想で頑張って作っています!
ちょっとお盆で色々忙しくプログラムが止まり気味なのですが・・・
一通りプログラムを組めたらまた来ます!
とりあえずお返事頂いてるのに放ってはおけないので連絡だけ。。
すみません><


yoshi  2005-08-17 07:31:30  No: 58589

とりあえず、マウスホイールはできました!!
後は右クリックを押しながら、の部分がんばってきます!!


yoshi  2005-08-17 07:46:04  No: 58590

右クリックを押しながら、マウスホイールで何か結果を出す事に成功しました!!

皆さんありがとうございます!
最終目標は一番上にかかげている通りなので、参考書等になければまた・・・皆さんのお力をお貸し願えますでしょうか^^;

すみません、なんかいっぱいいっぱいで^^;
それではどうも、ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加