2012-04-16 5 views
5

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

4

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.

2

.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.

Problemi correlati