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
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.
.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.
- 1. Warum sollte ich glBindAttribLocation verwenden?
- 2. Warum überschreiben wndproc
- 3. Warum sollte ich die Elementinitialisierungsliste verwenden?
- 4. Bootstrap Customization: Warum sollte ich weniger verwenden?
- 5. Warum sollte ich Datetime in SQL verwenden?
- 6. Warum sollte ich AutoDual nicht verwenden?
- 7. Warum sollte ich io_service :: work verwenden?
- 8. Warum sollte ich Java-Container verwenden?
- 9. Warum sollte ich nicht Unity verwenden?
- 10. Warum sollte ich Ruby on Rails verwenden?
- 11. Warum sollte ich Struts lernen und verwenden?
- 12. Warum sollte ich Isolated scope verwenden?
- 13. Wann/warum sollte ich Groovys @CompileStatic verwenden?
- 14. Sollte ich FxCop verwenden und warum?
- 15. Sollte ich Fremdschlüssel verwenden?
- 16. Warum sollte ich atoi() nicht verwenden?
- 17. Warum sollte ich divergierende Funktionen verwenden?
- 18. Wann/warum sollte ich eine Datenbank verwenden?
- 19. Warum sollte ich Microsoft Expression Blend verwenden?
- 20. Warum sollte ich UNIVERSAL :: isa nicht verwenden?
- 21. Sollte ich noch HTML-Entities verwenden? Warum?
- 22. Warum sollte ich LabelFor in MVC verwenden?
- 23. Warum habe ich # Ecto.Association.NotLoaded?
- 24. Warum sollte ich keine Leerzeichen in Dateinamen verwenden, wenn ich einen Code verwenden kann?
- 25. Kann ich VS2010 ENG verwenden, wenn ich anderenlang Lincense habe?
- 26. Sollte ich jQuery.each() verwenden?
- 27. Sollte ich jQuery.inArray() verwenden?
- 28. Sollte ich Bootstrap verwenden?
- 29. Sollte ich die addslashes-Funktion verwenden, wenn ich PDO verwende?
- 30. Warum sollte ich konvertieren?