私のフォームアプリケーションにWndProc
を使用することに関する基本的な質問があります。フォームイベントが利用可能な場合、WndProc
メソッドの使用方法を知りたいです。どのような場合にカスタムメッセージを作成する必要がありますか? MSDNは、Windowsメッセージの処理にのみ使用されることを示します。フォームイベントがあるときにWndProcを使用するのはなぜですか?
答えて
WndProcは、WinFormsがWin32ウィンドウのメッセージを包み込むラッパーを提供し、.NETレイヤーを使いやすく理解する方法です。
通常、次のように動作します。 WM_LBUTTONDOWNウィンドウメッセージの例を見てください。 Windows.Forms.Control.WndProcはこのメッセージを代行受信し、メッセージのWPARAMおよびLPARAMから関連情報を抽出します。次に、保護された仮想メソッドOnMouseDownをMouseEventArgsに適切にパッケージ化された関連情報とともに呼び出します。実装は、独自の処理の終了時にMouseDownイベントを発生させます。
したがって、OnXXXXメソッド/ XXXXイベントのセットを処理する方が、Windowsメッセージを直接傍受する方が簡単です。
しかし、興味のあるウィンドウメッセージがWinFormsで処理されない場合はどうなりますか?その場合、WndProcをオーバーライドして直接処理することができます。別の使用法は、メッセージ自体を傍受してから、コントロール自体がメッセージを処理する機会を得る前に、メッセージを破棄することです。または、アプリケーション内のコントロール間で送信するカスタムメッセージを作成することもできます。コントロールが受け取るすべてのメッセージを表示するときにデバッグするのにも便利です。ログを1か所に追加するだけで済みます。
.NETはWin32のラッパーです。これは、Windowsのすべてのメソッド、イベント、およびプロパティの100%を公開しません。
時にはカバーの下に移動する必要があります。
しかし、それはあなたが探しているものではありません - あなたの問題がそれを必要とするとき、良いオールスタックエクスチェンジ検索は通常あなたに知らせます。
- 1. SetScrollInfo()関数がWM_SIZEメッセージをWndProc()に送信するのはなぜですか?
- 2. なぜWndProcのキャストが正しくないのですか?
- 3. なぜ?と?を使用する必要があるのはなぜですか?一緒にならずに
- 4. イテレータを使用するときにランダムジェネレータを再配置する必要があるのはなぜですか?
- 5. TensorFlowでスパーステンソルを使用するときに勾配が使用できないのはなぜですか?
- 6. MVVM-Modelを使用しているときにWPFでWndProcを使用するには?
- 7. let(ES6)を使用するときにクロージャを使用する必要がないのはなぜですか?
- 8. マシュマロデバイスでナビゲーションドロワーを使用しているときに、アクティビティにタイトルバーが2つあるのはなぜですか?
- 9. MySQLの一時テーブルがあるときにRedisを使用するのはなぜですか?
- 10. C#4.0:ExpandoObjectがあるときにMethodBagを使用するのはなぜですか?
- 11. Qtアプリケーション(wndproc)でwinapiとopengl関数(C++)を使用する
- 12. ExecutorServiceを使用できるときに@AsynchronousをEJBで使用するのはなぜですか?
- 13. ROLLUP演算子を使用するときにDISTINCTキーワードを使用できないのはなぜですか?
- 14. Specflowがあるときになぜコード化UIを使用する必要がありますか?
- 15. $リソースで$ promiseを使用する必要があるのはなぜですか?
- 16. `pthread_mutex_trylock`があるときに` pthread_mutex_lock`が必要なのはなぜですか?
- 17. キャッスルアクティブレコードでは、セッションスコープを終了する必要があるときにCreateAndFlushを使用する必要があるのはなぜですか?
- 18. java.util.TimerTaskのpurge()を使用する必要があるのはなぜですか?
- 19. Dispatcher.BeginInvokeを使用しているときに、/なぜDispatcher.Runを呼び出す必要があるのですか?
- 20. 代入演算子を使用するときにコピーとスワップを使用するのはなぜですか?
- 21. PHPを使用すると、URLに_がある場合、$ _GETを使用してURLから値を取得できないのはなぜですか?
- 22. 改行をIFSとして使用すると、余分な出力があるのはなぜですか?
- 23. オブジェクトメソッドをWinApiとして使用するWndProcコールバック
- 24. プライベートタイプでautoを使用できるのはなぜですか?
- 25. 非ルートパッケージでリソースを使用するとRクラスをインポートする必要があるのはなぜですか?
- 26. ConcurrentDictionaryを使用するときに値としてnullを追加できないのはなぜですか?
- 27. Ada:整数をコンソールに印刷するときに大きなスペースがあるのはなぜですか?
- 28. VHDL - なぜあなたはループを生成する変数を使用することができません
- 29. ハイブで「挿入」を使用すると、常にヌル値があるのはなぜですか?
- 30. !$などを使用しているときにbashが拡張を表示するのはなぜですか?