Tengo una pregunta básica sobre el uso de WndProc
en mi solicitud de formulario. Quiero saber de qué sirve el método WndProc
cuando tengo eventos de formulario disponibles. ¿En qué casos necesito crear mensajes personalizados? MSDN dice que solo se usa para procesar los mensajes de Windows.¿Por qué debería usar WndProc cuando tengo eventos de formulario?
Respuesta
El WndProc es la forma en que WinForms proporciona un envoltorio alrededor de los mensajes de Windows Win32 con una capa .NET más fácil de usar y comprender.
Normalmente funciona de la siguiente manera. Tome el ejemplo del mensaje de ventana WM_LBUTTONDOWN. Windows.Forms.Control.WndProc interceptará este mensaje y extraerá información relevante de WPARAM y LPARAM del mensaje. Luego llama al método virtual protegido OnMouseDown con información relevante bien empaquetada en un MouseEventArgs. La implementación activará el evento MouseDown al final de su propio procesamiento.
Así que ocuparse de un conjunto de métodos OnXXXX/eventos XXXX es mucho más fácil que interceptar los mensajes de Windows directamente.
Pero, ¿qué sucede si WinForms no maneja el mensaje de Windows que le interesa? En ese caso, puede anular el WndProc y manejarlo usted mismo directamente. Otro uso es interceptar un mensaje y luego descartarlo antes de que el control tenga la oportunidad de procesarlo. O puede crear mensajes personalizados para enviar entre controles dentro de su aplicación. También es útil para la depuración cuando desea ver todos los mensajes que recibe su control, solo necesita agregar el registro en un solo lugar.
.NET es un contenedor de Win32. No expone el 100% de los métodos, eventos y propiedades de todo en Windows.
Por lo tanto, a veces tiene que pasar por debajo de las cobijas.
Sin embargo, no es algo que busque, cuando su problema así lo requiera, una buena búsqueda de Stack Exchange generalmente lo hará saber.
- 1. IObservable vs eventos simples o ¿Por qué debería usar IObservable?
- 2. ¿Por qué usar Eventos?
- 3. ¿Por qué debería usar glBindAttribLocation?
- 4. ¿Por qué debería usar MXML?
- 5. ¿Por qué debería usar Drools?
- 6. ¿Por qué debería usar Flex?
- 7. ¿Por qué debería usar @properties?
- 8. ¿Por qué debería usar "aplicar"?
- 9. ¿Por qué tengo que usar [ProtoInclude]?
- 10. ¿Por qué tengo que usar $ (esto)?
- 11. ¿Por qué no debería usar marcos HTML?
- 12. ¿Por qué debería usar un CAAnimationGroup?
- 13. ¿Por qué debería evitar usar el Dispatcher?
- 14. ¿Por qué no debería usar UNIVERSAL :: isa?
- 15. ¿Qué CursorAdapter tengo que usar?
- 16. ¿Por qué debería aprender y usar puntales?
- 17. ¿Cuándo y por qué debería usar TStringBuilder?
- 18. EF4.1 POCO: Por qué debería usar ICollection
- 19. ¿Por qué debería usar 'aplicar' en Clojure?
- 20. ¿Por qué debería usar exit select?
- 21. ¿Por qué no debería usar Unity?
- 22. ¿Por qué debería usar Doctrine sobre Zend_Db?
- 23. ¿Por qué no debería usar AutoDual?
- 24. ¿Por qué debería usar la ubicación nueva?
- 25. ¿Por qué debería usar Spring Android?
- 26. C# Archivo de configuración: ¿Por qué tengo que usar Settings.Default?
- 27. ¿Por qué no debería usar DISTINCT cuando podría usar GROUP BY?
- 28. ¿Por qué no debería usar async (evented) IO
- 29. ¿Por qué no debería usar comandos de Unix de php?
- 30. WndProc: Cómo obtener mensajes de ventana cuando se minimiza el formulario