Condividi tramite


Panoramica dell'uso del mouse

La ricezione e la gestione dell'input del mouse sono una parte importante di ogni applicazione Windows. È possibile gestire gli eventi del mouse per eseguire un'azione nell'applicazione o usare le informazioni sulla posizione del mouse per eseguire hit testing o altre azioni. Inoltre, è possibile modificare il modo in cui i controlli nell'applicazione gestiscono l'input del mouse. Questo articolo descrive in dettaglio questi eventi del mouse e come ottenere e modificare le impostazioni di sistema per il mouse.

Nei Windows Forms, l'input dell'utente viene inviato alle applicazioni sotto forma di messaggi di Windows . Una serie di metodi sottoponibili a override elabora questi messaggi a livello di applicazione, modulo e controllo. Quando questi metodi ricevono messaggi del mouse, generano eventi che possono essere gestiti per ottenere informazioni sull'input del mouse. In molti casi, le applicazioni Windows Form possono elaborare tutti gli input dell'utente semplicemente gestendo questi eventi. In altri casi, un'applicazione può eseguire l'override di uno dei metodi che elaborano i messaggi per intercettare un determinato messaggio prima che venga ricevuto dall'applicazione, dal modulo o dal controllo.

Eventi del mouse

Tutti i controlli Windows Form ereditano un set di eventi correlati all'input del mouse e della tastiera. Ad esempio, un controllo può gestire l'evento MouseClick per determinare la posizione di un clic del mouse. Per altre informazioni sugli eventi del mouse, vedere Uso degli eventi del mouse.

Posizione del mouse e verifica delle collisioni

Quando l'utente sposta il mouse, il sistema operativo sposta il puntatore del mouse. Il puntatore del mouse contiene un singolo pixel, denominato hot spot, che il sistema operativo tiene traccia e riconosce come posizione del puntatore. Quando l'utente sposta il mouse o preme un pulsante del mouse, il Control che contiene il HotSpot attiva l'evento del mouse corrispondente.

È possibile ottenere la posizione corrente del mouse con la proprietà Location del MouseEventArgs quando si gestisce un evento del mouse o utilizzando la proprietà Position della classe Cursor. È quindi possibile usare le informazioni sulla posizione del mouse per eseguire il hit testing e quindi eseguire un'azione in base alla posizione del mouse. La funzionalità hit-testing è incorporata in diversi controlli di Windows Forms, controlli quali ListView, TreeView, MonthCalendar e DataGridView.

Hit testing è utile per determinare quando l'applicazione deve eseguire un'azione specifica, se usata con l'evento del mouse appropriato, ad esempio MouseHover.

Modifica delle impostazioni di input del mouse

È possibile rilevare e modificare il modo in cui un controllo gestisce l'input del mouse derivando dal controllo e usando i metodi GetStyle e SetStyle. Il metodo SetStyle accetta una combinazione bit a bit di valori ControlStyles per determinare se il controllo ha un comportamento di clic standard, doppio clic o se gestisce l'elaborazione del mouse autonomamente. Inoltre, la classe SystemInformation include proprietà che descrivono le funzionalità del mouse e specificano come il mouse interagisce con il sistema operativo. Nella tabella seguente vengono riepilogate queste proprietà.

Proprietà Descrizione
DoubleClickSize Ottiene le dimensioni, in pixel, dell'area in cui l'utente deve fare clic due volte affinché il sistema operativo consideri i due clic un doppio clic.
DoubleClickTime Ottiene il numero massimo di millisecondi che possono trascorrere tra un primo clic e un secondo clic affinché l'azione del mouse venga considerata un doppio clic.
MouseButtons Ottiene il numero di pulsanti del mouse.
MouseButtonsSwapped Ottiene un valore che indica se le funzioni dei pulsanti sinistro e destro del mouse sono state scambiate.
MouseHoverSize Ottiene le dimensioni, in pixel, del rettangolo all'interno del quale il puntatore del mouse deve rimanere per il tempo del passaggio del mouse prima che venga generato un messaggio di passaggio del mouse.
MouseHoverTime Ottiene il tempo, espresso in millisecondi, che il puntatore del mouse deve rimanere nel rettangolo di passaggio del mouse prima che venga generato un messaggio al passaggio del mouse.
MousePresent Ottiene un valore che indica se è installato un mouse.
MouseSpeed Ottiene un valore che indica la velocità corrente del mouse, da 1 a 20.
MouseWheelPresent Ottiene un valore che indica se è installato un mouse con una rotellina del mouse.
MouseWheelScrollDelta Ottiene la quantità del valore differenziale dell'incremento di una singola rotazione della rotellina del mouse.
MouseWheelScrollLines Ottiene il numero di righe da scorrere quando la rotellina del mouse viene ruotata.

Metodi che elaborano i messaggi di input dell'utente

I moduli e i controlli hanno accesso all'interfaccia IMessageFilter e a un set di metodi sostituibili che elaborano i messaggi di Windows in punti diversi nella coda dei messaggi. Questi metodi hanno tutti un parametro Message, che incapsula i dettagli di basso livello dei messaggi di Windows. È possibile implementare o eseguire l'override di questi metodi per esaminare il messaggio e quindi consumare il messaggio o passarlo al consumatore successivo nella coda dei messaggi. Nella tabella seguente vengono illustrati i metodi che elaborano tutti i messaggi di Windows in Windows Form.

Metodo Note
PreFilterMessage Questo metodo intercetta i messaggi Windows in coda (noti anche come pubblicati) a livello dell'applicazione.
PreProcessMessage Questo metodo intercetta i messaggi di Windows a livello di modulo e di controllo prima dell'elaborazione.
WndProc Questo metodo elabora i messaggi di Windows sia a livello di modulo che di controllo.
DefWndProc Questo metodo esegue l'elaborazione predefinita dei messaggi di Windows a livello di modulo e controllo. In questo modo viene fornita la funzionalità minima di una finestra.
OnNotifyMessage Questo metodo intercetta i messaggi a livello di modulo e controllo dopo l'elaborazione. Per chiamare questo metodo, è necessario impostare il bit di stile EnableNotifyMessage.

Vedere anche