WPF メッセージ処理: WndProc の代替
Windows フォーム開発者は一般に WndProc
をオーバーライドして Windows メッセージを管理しますが、WPF には直接同等のものはありません。 代わりに、System.Windows.Interop
名前空間とその HwndSource
クラスは、同様の機能を実現するメカニズムを提供します。
WPF での Windows メッセージのインターセプト
次のコードは、HwndSource
を使用して WPF アプリケーション内で Windows メッセージをキャプチャして処理する方法を示しています。
<code class="language-csharp">using System; using System.Windows; using System.Windows.Interop; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); HwndSource source = PresentationSource.FromVisual(this) as HwndSource; source.AddHook(WndProc); } private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { // Implement custom message handling logic here... return IntPtr.Zero; } } }</code>
このコード スニペットは、WndProc
インスタンスに関連付けられた HwndSource
オブジェクトに Window1
メソッドをフックします。 OnSourceInitialized
イベントにより、ウィンドウのハンドルが作成された後にこのフックが確実に確立されます。 これにより、WndProc
メソッドは、WPF のデフォルトの処理の前に Windows メッセージをインターセプトして処理できるようになります。
このアプローチは、低レベルのシステム メッセージのインターセプトや、WPF の標準イベント システムを通じて直接公開されない特定のキーボードまたはマウス イベントへの応答など、カスタム メッセージ処理を必要とするシナリオに有益です。
以上がWPF の WndProc 機能をオーバーライドして Windows メッセージを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。