Ho una domanda di base sull'utilizzo di WndProc
nella mia domanda di modulo. Voglio sapere qual è l'utilizzo del metodo WndProc
quando sono disponibili gli eventi del modulo. In quali casi devo creare messaggi personalizzati? MSDN indica che viene utilizzato solo per elaborare i messaggi di Windows.Perché dovrei usare WndProc quando ho eventi di forma?
risposta
Il WndProc è il modo in cui WinForms fornisce un wrapper per i messaggi Windows Win32 con un livello .NET più intuitivo e comprensibile.
In genere funziona nel modo seguente. Prendi l'esempio del messaggio di Windows WM_LBUTTONDOWN. Windows.Forms.Control.WndProc intercetterà questo messaggio ed estrarrà le informazioni rilevanti dalla WPARAM e dalla LPARAM del messaggio. Quindi chiama il metodo virtuale protetto OnMouseDown con le informazioni pertinenti ben impacchettate in un oggetto MouseEventArgs. L'implementazione eseguirà quindi l'evento MouseDown al termine della sua elaborazione.
Quindi, gestire un insieme di metodi OnXXXX/XXXX è molto più facile che intercettare direttamente i messaggi di Windows.
Ma cosa succede se il messaggio di Windows che ti interessa non è gestito da WinForms? In tal caso, è possibile sovrascrivere WndProc e gestirlo direttamente. Un altro uso è intercettare un messaggio e poi scartarlo prima che il controllo stesso abbia la possibilità di elaborarlo. Oppure puoi creare messaggi personalizzati per l'invio tra i controlli all'interno dell'applicazione. Utile anche per il debug quando si desidera visualizzare ogni messaggio ricevuto dal proprio controllo, è sufficiente aggiungere la registrazione in un'unica posizione.
.NET è un wrapper di Win32. Non espone il 100% dei metodi, eventi e proprietà di tutto in Windows.
Quindi a volte è necessario andare sotto le coperte.
Tuttavia non è qualcosa che si va cercando - quando il problema lo richiede, una buona vecchia ricerca di Stack Exchange ti avviserà di solito.
- 1. Quando/Perché dovrei usare Multithread in Java?
- 2. C# Quando dovrei usare List e quando dovrei usare l'arraylist?
- 3. Perché dovrei usare Drools?
- 4. Perché dovrei usare glBindAttribLocation?
- 5. Quando dovrei usare CompiledQuery?
- 6. Perché dovrei usare gitignore?
- 7. Quando dovrei usare AQL?
- 8. Quando dovrei usare ConcurrentSkipListMap?
- 9. Perché dovrei usare Redis quando ho PostgreSQL come database per Django?
- 10. Quando dovrei usare git stash?
- 11. Quando dovrei usare l'Interface Builder?
- 12. Perché non dovrei usare Unity?
- 13. Quando dovrei usare metodi statici?
- 14. Perché dovrei usare exit select?
- 15. Perché dovrei usare io_service :: work?
- 16. Quando dovrei usare un parser?
- 17. Ho un compito Rails: dovrei usare script/runner o rake?
- 18. Perché dovrei usare funzioni divergenti?
- 19. Perché non dovrei usare atoi()?
- 20. Quando dovrei usare l'inizializzazione uniforme?
- 21. Quando dovrei usare # in ColdFusion?
- 22. Perché dovrei usare Spring Android?
- 23. Perché dovrei usare i modelli di visualizzazione?
- 24. Perché dovresti eseguire l'override di wndproc
- 25. Quando e perché dovrei usare ClassName: questo (null)?
- 26. Quando dovrei usare npm con il flag "-g" e perché?
- 27. Quando dovrei usare setUpClass e quando __init__?
- 28. Quando dovrei usare UIImagePickerControllerSourceTypePhotoLibrary invece di UIImagePickerControllerSourceTypeSavedPhotosAlbum?
- 29. Perché dovrei usare fieldlink quando aggiungo campi a un contenttype?
- 30. Quando dovrei usare require() e quando usare define()?