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

解決


けぃ  2006-08-11 12:46:56  No: 62716  IP: 192.*.*.*

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

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

編集 削除
egrath  2006-08-12 02:04:12  No: 62717  IP: 192.*.*.*

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

編集 削除
キー  2006-08-16 11:07:27  No: 62718  IP: 192.*.*.*

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

編集 削除
通りすがり  2006-08-21 14:48:43  No: 62719  IP: 192.*.*.*

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

編集 削除
subaru  2006-08-21 17:46:44  No: 62720  IP: 192.*.*.*

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

編集 削除
けぃ  2006-09-28 11:07:57  No: 62721  IP: 192.*.*.*

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

編集 削除
けぃ  2006-09-28 11:09:14  No: 62722  IP: 192.*.*.*

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

編集 削除
subaru  2006-09-28 14:25:59  No: 62723  IP: 192.*.*.*

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

試したのはこんな感じ。
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-28 18:25:17  No: 62724  IP: 192.*.*.*

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

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

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

編集 削除