CStatic(PictureControl)にWM_MOUSEWHEELが来ないのですが、
そういうものなのでしょうか?
環境:XP / VC.Net2003 / MFC使用
CStaticにSS_NOTIFYスタイルを追加してみてはどうでしょう
Staticコントロールの親宛てに通知されていないでしょうか
WM_MOUSEWHEELは、ウインドウに対して送られるメッセージなのでもともとコントロール群では受け取れません。よって、ウインドウでWM_MOUSEWHEELを受け取ってstaticコントロールの上に来たときに処理させるようにしましょう。
サブクラス化したら普通に拾えましたけど・・・
単にコントロールにフォーカスがセットされていないだけじゃないでしょうか?
Spy++で見ても、Windowのクライアント領域上ではちゃんとWM_MOUSEWHEELがWindowに来ていますが、CStatic(たとえばPictureControl)の上に行くとWM_MOUSEWHEELがこないです。
ちなみに、メッセージ自体が来て無いのでサブクラス化しても拾えないと思うんですが、(実際にやっても拾えなかった)どうやったかレスもらえますか?
追記ですが、スタイルはSS_NOTIFYを追加していて、さらにフォーカスは
対象のコントロールにセットされています
>ちなみに、メッセージ自体が来て無いのでサブクラス化しても拾えないと思うんですが、(実際にやっても拾えなかった)どうやったかレスもらえますか?
試したのはこんな感じ。
1.MFCでダイアログベースのプロジェクトを作成する
2.CStaticを基本クラスとしてCMyStaticというクラスを追加する
3.CMyStaticにOnMouseWheelを追加し、処理を書く
4.ダイアログ上にPictureコントロールを配置しIDをIDC_MYSTATICにする
5.IDC_MYSTATICのコントロールをCMyStaticの変数に割り当てる
6.ダイアログのOnInitDialogでIDC_MYSTATICのコントロールにフォーカスを設定
以上です。
注意すべき点は6でOnInitDialogの戻り値をFALSEにすることくらいかなあ?
解決しました・・・
ちゃんとメッセージ来てました・・
原因は、Wheel Redirectorというアプリを常駐させて使用していたのですが(ホイールに対応していないアプリにスクロールイベントを投げるツール)このツールがCStaticコントロール上ではメッセージを投げていないようでした。
お騒がせしました。
subaruさん、みなさん、ありがとうございました。
ツイート | ![]() |