2012-04-16 16 views
5

Ich habe eine grundlegende Frage über die Verwendung von WndProc in meiner Formularanwendung. Ich möchte wissen, was ist die Verwendung der WndProc Methode, wenn ich Formularereignisse verfügbar haben. In welchen Fällen muss ich benutzerdefinierte Nachrichten erstellen? MSDN sagt, dass es nur zur Verarbeitung der Windows-Nachrichten verwendet wird.Warum sollte ich WndProc verwenden, wenn ich Formularereignisse habe?

Antwort

4

Das WndProc ist, wie WinForms einen Wrapper um die Win32-Windows-Nachrichten mit einer einfach zu verwendenden und verständlichen .NET-Schicht bereitstellt.

Normalerweise funktioniert es folgendermaßen. Nehmen Sie das Beispiel der WM_LBUTTONDOWN Windows-Nachricht. Das Windows.Forms.Control.WndProc wird diese Nachricht abfangen und relevante Information aus dem WPARAM und dem LPARAM der Nachricht extrahieren. Dann ruft es die geschützte virtuelle Methode OnMouseDown mit relevanten Informationen auf, die gut in einem MouseEventArgs verpackt sind. Die Implementierung wird dann das MouseDown-Ereignis am Ende seiner eigenen Verarbeitung auslösen.

Der Umgang mit einer Reihe von OnXXXX-Methoden/XXXX-Ereignissen ist viel einfacher als das Abfangen der Windows-Nachrichten direkt.

Aber was ist, wenn die Windows-Nachricht, die Sie interessiert, nicht von WinForms behandelt wird? In diesem Fall können Sie den WndProc überschreiben und ihn selbst direkt behandeln. Eine andere Verwendung besteht darin, eine Nachricht abzufangen und dann zu verwerfen, bevor die Steuerung selbst eine Chance hat, sie zu verarbeiten. Oder Sie können benutzerdefinierte Nachrichten zum Senden zwischen den Steuerelementen in Ihrer Anwendung erstellen. Auch nützlich für das Debuggen, wenn Sie jede Nachricht sehen möchten, die Ihr Steuerelement empfängt, müssen Sie die Protokollierung nur an einer Stelle hinzufügen.

2

.NET ist ein Wrapper um Win32. Es stellt nicht 100% der Methoden, Ereignisse und Eigenschaften von allem in Windows zur Verfügung.

Also manchmal müssen Sie unter die Decke gehen.

Es ist jedoch nicht etwas, wonach Sie suchen - wenn Ihr Problem es erfordert, wird Ihnen normalerweise eine gute alte Stack Exchange-Suche mitteilen.

Verwandte Themen