2009年11月9日月曜日

WM_MOUSEWHEELとWM_MBUTTONDOWNで

 マウスのホイールをそのまま回すのは日常よく使用すると思うが、押し下げたまま回すことも可能なようだ。押し込んだまま回すという動作で何か出来ないかな?

 マウスホイール周りの処理をテストしていたのだけど、マウスのホイールを押したままホイール回すと、ホイールを離したってフラグが立つのかな? と実験してみたら、そのまま押し下げた状態をちゃんと維持する。
 ブラウザ上でホイールをクリックすると▲▼マーカーがでてきてスクロールが可能になるが、その状態でホイールを回すと通常の状態に戻るから、てっきり両立不可能だと思っていたが別にそんなことはなかった。どちらもスクロール関係だからキャンセルされるんだろう。

 プログラム上ではホイールの処理は別々になってて
・ホイール(正確にはマウスの真ん中ボタン)押し込みにはWM_MBUTTONDOWN
・ホイール押し込みからの解放つまり離しにはWM_MBUTTONUP
・ホイール回転にはWM_MOUSEWHEEL
のウィンドウメッセージが飛んでくるので、対応した処理を書くだけ。ホイールがおされているかどうかは変数を巧みに使うかGetKeyState的な関数をしようすれば判別も可能かな。ひょっとしたらマウスによっては動作そのものが不可能かもしれないが、ホイールついてないやつもあるし気にしなくてもいいか。

 ちなみに自分が使っているノートPCについてるタッチパッドには真ん中ボタンがあるが、どこをどう押そうがWM_MOUSEWHEELは飛んでこない。ドライバの問題かと思われるが。



 適当なアプリケーションで試してみた。
・ペイント - そもそもホイールにも対応してない
・Excel 2003 - 押し込んだ状態では回転は無視される
・PictBearSE - 押し込みに非対応
・explorer - 押し込みに非対応
・MetasequoiaLE R2.4 - 押し込んだ状態では回転は無視される

0 件のコメント: