2015-10-15 18 views

risposta

3

Fondamentalmente è quello che fa il Windows UI framework named User32 per voi. Vedi anche MSDN: Windows and Messages.

Questo framework funziona consentendo all'applicazione di implementare un "message pump" che riceve messaggi da Windows. Un messaggio può essere "il mouse si è spostato su questa finestra" o "è stato premuto il pulsante del mouse". Si noti che una "finestra" è più di una semplice "finestra" nel senso di un modulo, assicurarsi di leggere il collegamento MSDN. Un pulsante è anche una finestra.

Quindi:

  • Un mouse è collegato al PC tramite un bus hardware
  • utente sposta il mouse
  • segnali hardware vengono tradotti in segnali software
  • Windows converte questi segnali ai messaggi
  • Windows invia questi messaggi alla pompa messaggi dell'applicazione appropriata
  • L'applicazione fa es con questi messaggi quello che vuole

Ora WinForms di .NET avvolge questa pompa messaggio per te, ed espone i messaggi come eventi è possibile abbonarsi. Lo si può vedere in azione per overriding WndProc() on your control of coice:

protected override void WndProc(ref Message m) 
{ 
    Console.WriteLine(m); 
    base.WndProc(ref m); 
} 

Più in profondità (da MSDN: About Messages and Message Queues), un messaggio di Windows è associato ad una finestra (o "controllo" in termini WinForms) utilizzando una maniglia. Questo handle identifica univocamente un controllo.

In questo modo WinForms sa che un mouse message con handle X è destinato al controllo Y con quell'handle, quindi solleva il MouseClick o l'evento correlato alla ricezione di quel messaggio.

+0

Grazie per la risposta. Tutti questi sistemi di messaggi in Windows sono scritti in linguaggio C o in un'altra lingua? – Lyrk

+0

I messaggi di Windows sono un concetto indipendente dalla lingua e in memoria. Si chiama la libreria User32 per ricevere messaggi nel linguaggio di programmazione scelto. – CodeCaster

3

Tracciamento della posizione del mouse Lo stato dello & viene gestito dal sistema operativo stesso, è presente un gruppo di flag di input inviati alle applicazioni quando il mouse si sposta/viene fatto clic su/etc. Gli stessi eventi di Windows WM_LBUTTONDOWN e WM_LBUTTONUP che usereste in un'applicazione C++ o C (See Here) sono intercettati dal framework .Net e convertiti in eventi cliccati che tutti conosciamo e amiamo. È tutto gestito dal framework stesso, le specifiche di esattamente quello che fa per tradurle in "questo specifico pulsante è stato cliccato" in modo efficiente non lo so, ma alla fine è irrilevante in realtà.

Non è necessario implementarlo perché gli sviluppatori di .Net Framework e i relativi elementi dell'interfaccia utente hanno capito che tutti avrebbero bisogno di implementare tale funzionalità per un pulsante, e così lo hanno fatto per noi.

+0

Grazie per la risposta. – Lyrk

3

Windows utilizza il modello di passaggio dei messaggi. Il sistema operativo comunica con la finestra dell'applicazione passando messaggi ad esso. Un messaggio è semplicemente un codice numerico che designa un particolare evento. Ad esempio, se l'utente preme il tasto sinistro del mouse, la finestra riceve un messaggio con il seguente codice messaggio.

Alcuni messaggi contengono dati associati. Ad esempio, il messaggio WM_LBUTTONDOWN include la coordinata x e la coordinata y del cursore del mouse.

Per passare un messaggio a una finestra, il sistema operativo chiama la procedura di finestra registrata per quella finestra. (E ora sapete a cosa serve la finestra.), Per la modalità Dettagli potete leggere questo articolo, Window Messages

+0

Grazie per la risposta. – Lyrk

+0

Siete i benvenuti @Lyrk – Adil

Problemi correlati