CStaticコントロールにWM_MOUSEWHEELがこない

解決


けぃ  2006-08-11 21:46:56  No: 62716

CStatic(PictureControl)にWM_MOUSEWHEELが来ないのですが、
そういうものなのでしょうか?

環境:XP / VC.Net2003 / MFC使用


egrath  2006-08-12 11:04:12  No: 62717

CStaticにSS_NOTIFYスタイルを追加してみてはどうでしょう


キー  2006-08-16 20:07:27  No: 62718

Staticコントロールの親宛てに通知されていないでしょうか


通りすがり  2006-08-21 23:48:43  No: 62719

WM_MOUSEWHEELは、ウインドウに対して送られるメッセージなのでもともとコントロール群では受け取れません。よって、ウインドウでWM_MOUSEWHEELを受け取ってstaticコントロールの上に来たときに処理させるようにしましょう。


subaru  2006-08-22 02:46:44  No: 62720

サブクラス化したら普通に拾えましたけど・・・
単にコントロールにフォーカスがセットされていないだけじゃないでしょうか?


けぃ  2006-09-28 20:07:57  No: 62721

Spy++で見ても、Windowのクライアント領域上ではちゃんとWM_MOUSEWHEELがWindowに来ていますが、CStatic(たとえばPictureControl)の上に行くとWM_MOUSEWHEELがこないです。
ちなみに、メッセージ自体が来て無いのでサブクラス化しても拾えないと思うんですが、(実際にやっても拾えなかった)どうやったかレスもらえますか?


けぃ  2006-09-28 20:09:14  No: 62722

追記ですが、スタイルはSS_NOTIFYを追加していて、さらにフォーカスは
対象のコントロールにセットされています


subaru  2006-09-28 23:25:59  No: 62723

>ちなみに、メッセージ自体が来て無いのでサブクラス化しても拾えないと思うんですが、(実際にやっても拾えなかった)どうやったかレスもらえますか?

試したのはこんな感じ。
1.MFCでダイアログベースのプロジェクトを作成する
2.CStaticを基本クラスとしてCMyStaticというクラスを追加する
3.CMyStaticにOnMouseWheelを追加し、処理を書く
4.ダイアログ上にPictureコントロールを配置しIDをIDC_MYSTATICにする
5.IDC_MYSTATICのコントロールをCMyStaticの変数に割り当てる
6.ダイアログのOnInitDialogでIDC_MYSTATICのコントロールにフォーカスを設定

以上です。
注意すべき点は6でOnInitDialogの戻り値をFALSEにすることくらいかなあ?


けぃ  2006-09-29 03:25:17  No: 62724

解決しました・・・
ちゃんとメッセージ来てました・・

原因は、Wheel Redirectorというアプリを常駐させて使用していたのですが(ホイールに対応していないアプリにスクロールイベントを投げるツール)このツールがCStaticコントロール上ではメッセージを投げていないようでした。

お騒がせしました。
subaruさん、みなさん、ありがとうございました。


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

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






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