2

VScrollコントロールのサブクラスを作成し、WM_VSCROLLメッセージをインターセプトして何かを実行しようとしています。msdn、および無数の記事/フォーラムでは、それが何であるかというWindowsヘッダーファイルにさえWM_VSCROLLあるはずです。0x115しかし、待っ0x115ても何も起こりません。0x2115私はそれが代わりにやって来ていることに気づきました、この記事でさえそれをとして使用してい0x2115ます。0x2115それが代わりに来る理由についての理由/説明はありますか?WinFormsコントロールだからですか?

ありがとう

4

1 に答える 1

3

はい、これは Windows GUI クラス ライブラリではかなり標準的です。Winforms も例外ではありません。ネイティブの Windows コントロールである ScrollBar は、親に通知を送信します。結局のところ、それらは、自分自身ではなく、親が通知に基づいて行動するように設計されています. つまり、親ウィンドウがスクロールすることを期待しています。

ただし、これは、メッセージの処理と生成をオーバーライドすることで動作を変更できるコントロール クラスの概念とはあまり互換性がありません。または、.NET のイベントの考え方について言えば、親だけでなく、誰でも Scroll イベントをサブスクライブできます。

これにより多くのメリットが得られますが、WM_VSCROLL メッセージを親からコントロールに戻すには、何かを行う必要があります。これは、Winforms 配管が処理するものです。メッセージを送り返しますが、メッセージ番号を変更して、元のメッセージではなく反映されたメッセージであることを示します。0x2000 を追加します。Winforms ソース コード内の (偽の) WM_REFLECT メッセージの値。

于 2012-04-26T01:00:24.073 に答える