2012-04-16 3 views
5

私のフォームアプリケーションにWndProcを使用することに関する基本的な質問があります。フォームイベントが利用可能な場合、WndProcメソッドの使用方法を知りたいです。どのような場合にカスタムメッセージを作成する必要がありますか? MSDNは、Windowsメッセージの処理にのみ使用されることを示します。フォームイベントがあるときにWndProcを使用するのはなぜですか?

答えて

4

WndProcは、WinFormsがWin32ウィンドウのメッセージを包み込むラッパーを提供し、.NETレイヤーを使いやすく理解する方法です。

通常、次のように動作します。 WM_LBUTTONDOWNウィンドウメッセージの例を見てください。 Windows.Forms.Control.WndProcはこのメッセージを代行受信し、メッセージのWPARAMおよびLPARAMから関連情報を抽出します。次に、保護された仮想メソッドOnMouseDownをMouseEventArgsに適切にパッケージ化された関連情報とともに呼び出します。実装は、独自の処理の終了時にMouseDownイベントを発生させます。

したがって、OnXXXXメソッド/ XXXXイベントのセットを処理する方が、Windowsメッセージを直接傍受する方が簡単です。

しかし、興味のあるウィンドウメッセージがWinFormsで処理されない場合はどうなりますか?その場合、WndProcをオーバーライドして直接処理することができます。別の使用法は、メッセージ自体を傍受してから、コントロール自体がメッセージを処理する機会を得る前に、メッセージを破棄することです。または、アプリケーション内のコントロール間で送信するカスタムメッセージを作成することもできます。コントロールが受け取るすべてのメッセージを表示するときにデバッグするのにも便利です。ログを1か所に追加するだけで済みます。

2

.NETはWin32のラッパーです。これは、Windowsのすべてのメソッド、イベント、およびプロパティの100%を公開しません。

時にはカバーの下に移動する必要があります。

しかし、それはあなたが探しているものではありません - あなたの問題がそれを必要とするとき、良いオールスタックエクスチェンジ検索は通常あなたに知らせます。

関連する問題