Panoramica dell'input del mouse
Il mouse è un dispositivo di input utente importante, ma facoltativo per le applicazioni. Un'applicazione ben scritta deve includere un'interfaccia del mouse, ma non deve dipendere esclusivamente dal mouse per acquisire l'input dell'utente. L'applicazione deve fornire anche il supporto completo della tastiera.
Un'applicazione riceve l'input del mouse sotto forma di messaggi inviati o inviati alle relative finestre.
Questa sezione contiene gli argomenti seguenti:
- Cursore del mouse
- Acquisizione mouse
- Mouse ClickLock
- Configurazione del mouse
- XBUTTONs
- Messaggi del mouse
- Mouse Sonar
- Mouse Vanish
- Rotellina del mouse
- Attivazione finestra
Cursore del mouse
Quando l'utente sposta il mouse, il sistema sposta una bitmap sullo schermo denominata cursore del mouse. Il cursore del mouse contiene un punto a pixel singolo denominato punto critico, un punto che il sistema tiene traccia e riconosce come posizione del cursore. Quando si verifica un evento del mouse, la finestra che contiene il punto critico riceve in genere il messaggio del mouse risultante dall'evento. La finestra non deve essere attiva o avere lo stato attivo della tastiera per ricevere un messaggio del mouse.
Il sistema mantiene una variabile che controlla la velocità del mouse, ovvero la distanza che il cursore si sposta quando l'utente sposta il mouse. È possibile usare la funzione SystemParametersInfo con il flag SPI_GETMOUSE o SPI_SETMOUSE per recuperare o impostare la velocità del mouse. Per altre informazioni sui cursori del mouse, vedere Cursori.
Mouse Capture
Il sistema invia in genere un messaggio del mouse alla finestra che contiene il punto attivo del cursore quando si verifica un evento del mouse. Un'applicazione può modificare questo comportamento usando la funzione SetCapture per instradare i messaggi del mouse a una finestra specifica. La finestra riceve tutti i messaggi del mouse finché l'applicazione chiama la funzione ReleaseCapture o specifica un'altra finestra di acquisizione oppure fino a quando l'utente non fa clic su una finestra creata da un altro thread.
Quando cambia l'acquisizione del mouse, il sistema invia un messaggio WM_CAPTURECHANGED alla finestra che sta perdendo l'acquisizione del mouse. Il parametro lParam del messaggio specifica un handle per la finestra che ottiene l'acquisizione del mouse.
Solo la finestra in primo piano può acquisire l'input del mouse. Quando una finestra in background tenta di acquisire l'input del mouse, riceve i messaggi solo per gli eventi del mouse che si verificano quando il cursore si trova all'interno della parte visibile della finestra.
L'acquisizione dell'input del mouse è utile se una finestra deve ricevere tutti gli input del mouse, anche quando il cursore si sposta all'esterno della finestra. Ad esempio, un'applicazione tiene traccia della posizione del cursore dopo un evento di pulsante del mouse verso il basso, dopo il cursore fino a quando non si verifica un evento di pulsante del mouse verso l'alto. Se un'applicazione non ha acquisito l'input del mouse e l'utente rilascia il pulsante del mouse all'esterno della finestra, la finestra non riceve il messaggio pulsante su.
Un thread può usare la funzione GetCapture per determinare se una delle finestre ha acquisito il mouse. Se una delle finestre del thread ha acquisito il mouse, GetCapture recupera un handle nella finestra.
Mouse ClickLock
La funzionalità di accessibilità Mouse ClickLock consente a un utente di bloccare il pulsante primario del mouse dopo un singolo clic. Per un'applicazione, il pulsante sembra ancora essere premuto. Per sbloccare il pulsante, un'applicazione può inviare qualsiasi messaggio del mouse o l'utente può fare clic su qualsiasi pulsante del mouse. Questa funzionalità consente a un utente di eseguire combinazioni di mouse complesse più semplicemente. Ad esempio, quelli con determinate limitazioni fisiche possono evidenziare testo, trascinare oggetti o aprire più facilmente i menu. Per altre informazioni, vedere i flag seguenti e le osservazioni in SystemParametersInfo:
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Configurazione del mouse
Anche se il mouse è un dispositivo di input importante per le applicazioni, non tutti gli utenti hanno necessariamente un mouse. Un'applicazione può determinare se il sistema include un mouse passando il valore SM_MOUSEPRESENT alla funzione GetSystemMetrics .
Windows supporta un mouse con un massimo di tre pulsanti. Su un mouse a tre pulsanti, i pulsanti sono designati come pulsanti sinistro, centrale e destro. I messaggi e le costanti denominate correlate ai pulsanti del mouse usano le lettere L, M e R per identificare i pulsanti. Il pulsante su un singolo pulsante del mouse viene considerato come il pulsante sinistro. Anche se Windows supporta un mouse con più pulsanti, la maggior parte delle applicazioni usa principalmente il pulsante sinistro e gli altri almeno, se affatto.
Le applicazioni possono anche supportare una rotellina del mouse. La rotellina del mouse può essere premuta o ruotata. Quando viene premuta la rotellina del mouse, funge da pulsante centrale (terzo), inviando messaggi normali al pulsante centrale all'applicazione. Quando viene ruotata, all'applicazione viene inviato un messaggio con rotellina. Per altre informazioni, vedere la sezione Rotellina del mouse.
Le applicazioni possono supportare i pulsanti di comando dell'applicazione. Questi pulsanti, chiamati pulsanti X, sono progettati per consentire un accesso più semplice a un browser Internet, posta elettronica e servizi multimediali. Quando si preme un pulsante X, viene inviato un messaggio WM_APPCOMMAND all'applicazione. Per altre informazioni, vedere la descrizione nel messaggio WM_APPCOMMAND .
Un'applicazione può determinare il numero di pulsanti del mouse passando il valore SM_CMOUSEBUTTONS alla funzione GetSystemMetrics . Per configurare il mouse per un utente sinistro, l'applicazione può usare la funzione SwapMouseButton per invertire il significato dei pulsanti sinistro e destro del mouse. Il passaggio del valore SPI_SETMOUSEBUTTONSWAP alla funzione SystemParametersInfo è un altro modo per invertire il significato dei pulsanti. Si noti, tuttavia, che il mouse è una risorsa condivisa, in modo che il significato dei pulsanti influisca su tutte le applicazioni.
XBUTTONs
Windows supporta un mouse con cinque pulsanti. Oltre ai pulsanti sinistro, centrale e destro sono presenti XBUTTON1 e XBUTTON2, che forniscono lo spostamento indietro e avanti quando si usa il browser.
Gestione finestre supporta XBUTTON1 e XBUTTON2 tramite i messaggi WM_XBUTTON* e WM_NCXBUTTON* . L'HIWORD del WPARAM in questi messaggi contiene un flag che indica quale pulsante X è stato premuto. Poiché questi messaggi del mouse si adattano anche tra le costanti WM_MOUSEFIRST e WM_MOUSELAST, un'applicazione può filtrare tutti i messaggi del mouse con GetMessage o PeekMessage.
Il supporto seguente XBUTTON1 e XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Le API seguenti sono state modificate per supportare questi pulsanti:
È improbabile che una finestra figlio in un'applicazione componente sia in grado di implementare direttamente i comandi per il XBUTTON1 e XBUTTON2. DefWindowProc invia quindi un messaggio di WM_APPCOMMAND a una finestra quando si fa clic su un pulsante X. DefWindowProc invia anche il messaggio di WM_APPCOMMAND alla finestra padre. Questo è simile al modo in cui i menu di scelta rapida vengono richiamati con un clic con il pulsante destro del mouse: DefWindowProc invia un messaggio WM_CONTEXTMENU al menu e lo invia anche al relativo elemento padre. Inoltre, se DefWindowProc riceve un messaggio di WM_APPCOMMAND per una finestra di primo livello, chiama un hook della shell con codice HSHELL_APPCOMMAND.
È disponibile il supporto per le tastiere con tasti aggiuntivi per funzioni del browser, funzioni multimediali, avvio delle applicazioni e risparmio energia. Per altre informazioni, vedere Tasti di tastiera per l'esplorazione e altre funzioni.
Messaggi del mouse
Il mouse genera un evento di input quando l'utente sposta il mouse o preme o rilascia un pulsante del mouse. Il sistema converte gli eventi di input del mouse in messaggi e li inserisce nella coda dei messaggi del thread appropriato. Quando i messaggi del mouse vengono pubblicati più velocemente di un thread, il sistema elimina tutti i messaggi del mouse, ma il messaggio del mouse più recente.
Una finestra riceve un messaggio del mouse quando si verifica un evento del mouse mentre il cursore si trova all'interno dei bordi della finestra o quando la finestra ha acquisito il mouse. I messaggi del mouse sono suddivisi in due gruppi: messaggi dell'area client e messaggi di area non client. In genere, un'applicazione elabora i messaggi dell'area client e ignora i messaggi dell'area non client.
Questa sezione contiene gli argomenti seguenti:
Messaggi del mouse dell'area client
Una finestra riceve un messaggio del mouse dell'area client quando si verifica un evento del mouse all'interno dell'area client della finestra. Il sistema invia il messaggio WM_MOUSEMOVE alla finestra quando l'utente sposta il cursore all'interno dell'area client. Invia uno dei messaggi seguenti quando l'utente preme o rilascia un pulsante del mouse mentre il cursore si trova all'interno dell'area client.
Message | Significato |
---|---|
WM_LBUTTONDBLCLK | È stato fatto doppio clic sul pulsante sinistro del mouse. |
WM_LBUTTONDOWN | È stato premuto il pulsante sinistro del mouse. |
WM_LBUTTONUP | Il pulsante sinistro del mouse è stato rilasciato. |
WM_MBUTTONDBLCLK | Il pulsante centrale del mouse è stato fatto doppio clic. |
WM_MBUTTONDOWN | È stato premuto il pulsante centrale del mouse. |
WM_MBUTTONUP | Il pulsante centrale del mouse è stato rilasciato. |
WM_RBUTTONDBLCLK | È stato fatto doppio clic sul pulsante destro del mouse. |
WM_RBUTTONDOWN | È stato premuto il pulsante destro del mouse. |
WM_RBUTTONUP | Il pulsante destro del mouse è stato rilasciato. |
WM_XBUTTONDBLCLK | È stato fatto doppio clic su un pulsante X del mouse. |
WM_XBUTTONDOWN | È stato premuto un pulsante X del mouse. |
WM_XBUTTONUP | È stato rilasciato un pulsante X del mouse. |
Inoltre, un'applicazione può chiamare la funzione TrackMouseEvent per fare in modo che il sistema invii altri due messaggi. Invia il messaggio WM_MOUSEHOVER quando il cursore passa il puntatore sull'area client per un determinato periodo di tempo. Invia il messaggio WM_MOUSELEAVE quando il cursore esce dall'area client.
Parametri del messaggio
Il parametro lParam di un messaggio del mouse dell'area client indica la posizione dell'area sensibile del cursore. La parola di ordine basso indica la coordinata x del punto attivo e la parola dell'ordine elevato indica la coordinata y. Le coordinate vengono specificate nelle coordinate client. Nel sistema di coordinate client, tutti i punti sullo schermo vengono specificati in relazione alle coordinate (0,0) dell'angolo superiore sinistro dell'area client.
Il parametro wParam contiene flag che indicano lo stato degli altri pulsanti del mouse e i tasti CTRL e MAIUSC al momento dell'evento del mouse. È possibile verificare la presenza di questi flag quando l'elaborazione dei messaggi del mouse dipende dallo stato di un altro pulsante del mouse o del tasto CTRL o MAIUSC. Il parametro wParam può essere una combinazione dei valori seguenti.
valore | Descrizione |
---|---|
MK_CONTROL | Il tasto CTRL è inattivo. |
MK_LBUTTON | Il pulsante sinistro del mouse è in basso. |
MK_MBUTTON | Il pulsante centrale del mouse è in basso. |
MK_RBUTTON | Il pulsante destro del mouse è in basso. |
MK_SHIFT | Il tasto MAIUSC è inattivo. |
MK_XBUTTON1 | Il primo pulsante X è in basso. |
MK_XBUTTON2 | Il secondo pulsante X è inattivo. |
Fare doppio clic su messaggi
Il sistema genera un messaggio di doppio clic quando l'utente fa doppio clic su un pulsante del mouse due volte in rapida successione. Quando l'utente fa clic su un pulsante, il sistema stabilisce un rettangolo centrato intorno al punto attivo del cursore. Contrassegna anche l'ora in cui si è verificato il clic. Quando l'utente fa clic sullo stesso pulsante una seconda volta, il sistema determina se il punto attivo è ancora all'interno del rettangolo e calcola il tempo trascorso dal primo clic. Se il punto critico è ancora all'interno del rettangolo e il tempo trascorso non supera il valore di timeout del doppio clic, il sistema genera un messaggio di doppio clic.
Un'applicazione può ottenere e impostare valori di timeout doppio clic usando rispettivamente le funzioni GetDoubleClickTime e SetDoubleClickTime. In alternativa, l'applicazione può impostare il valore di timeout doppio clic usando il flag SPI_SETDOUBLECLICKTIME con la funzione SystemParametersInfo. Può anche impostare le dimensioni del rettangolo usato dal sistema per rilevare i doppio clic passando i flag SPI_SETDOUBLECLKWIDTH e SPI_SETDOUBLECLKHEIGHT a SystemParametersInfo. Si noti, tuttavia, che l'impostazione del valore di timeout doppio clic e del rettangolo influisce su tutte le applicazioni.
Per impostazione predefinita, una finestra definita dall'applicazione non riceve messaggi con doppio clic. A causa del sovraccarico di sistema dovuto alla generazione di messaggi con doppio clic, questi messaggi vengono generati solo per le finestre appartenenti alle classi con lo stile della classe CS_DBLCLKS . L'applicazione deve impostare questo stile durante la registrazione della classe window. Per altre informazioni, vedere Classi di finestre.
Un messaggio con doppio clic è sempre il terzo messaggio di una serie di quattro messaggi. I primi due messaggi sono i messaggi button-down e button-up generati dal primo clic. Il secondo clic genera il messaggio di doppio clic seguito da un altro messaggio di pulsante su. Ad esempio, facendo doppio clic sul pulsante sinistro del mouse viene generata la sequenza di messaggi seguente:
Poiché una finestra riceve sempre un messaggio di pulsante verso il basso prima di ricevere un messaggio di doppio clic, un'applicazione usa in genere un messaggio di doppio clic per estendere un'attività iniziata durante un messaggio di pulsante verso il basso. Ad esempio, quando l'utente fa clic su un colore nella tavolozza dei colori di Microsoft Paint, Paint visualizza il colore selezionato accanto alla tavolozza. Quando l'utente fa doppio clic su un colore, Paint visualizza il colore e apre la finestra di dialogo Modifica colori .
Messaggi del mouse dell'area non client
Una finestra riceve un messaggio del mouse dell'area non client quando si verifica un evento del mouse in qualsiasi parte di una finestra, ad eccezione dell'area client. L'area non client di una finestra è costituita dal bordo, dalla barra dei menu, dalla barra del titolo, dalla barra di scorrimento, dal menu finestra, dal pulsante riduci a icona e dal pulsante ingrandisci.
Il sistema genera messaggi di area non client principalmente per il proprio uso. Ad esempio, il sistema usa messaggi di area non client per modificare il cursore in una freccia a due punte quando il punto attivo del cursore si sposta nel bordo di una finestra. Una finestra deve passare messaggi del mouse dell'area non client alla funzione DefWindowProc per sfruttare i vantaggi dell'interfaccia predefinita del mouse.
Esiste un messaggio del mouse dell'area non client corrispondente per ogni messaggio del mouse dell'area client. I nomi di questi messaggi sono simili, ad eccezione del fatto che le costanti denominate per i messaggi di area non client includono le lettere NC. Ad esempio, lo spostamento del cursore nell'area non client genera un messaggio WM_NCMOUSEMOVE e premendo il pulsante sinistro del mouse mentre il cursore si trova nell'area non client genera un messaggio WM_NCLBUTTONDOWN.
Il parametro lParam di un messaggio del mouse dell'area non client è una struttura che contiene le coordinate x e y del punto attivo del cursore. A differenza delle coordinate dei messaggi del mouse dell'area client, le coordinate vengono specificate nelle coordinate dello schermo anziché nelle coordinate client. Nel sistema di coordinate dello schermo, tutti i punti sullo schermo sono relativi alle coordinate (0,0) dell'angolo superiore sinistro dello schermo.
Il parametro wParam contiene un valore hit test, un valore che indica dove si è verificato l'evento del mouse nell'area non client. La sezione seguente illustra lo scopo dei valori di hit test.
Messaggio WM_NCHITTEST
Ogni volta che si verifica un evento del mouse, il sistema invia un messaggio di WM_NCHITTEST alla finestra contenente il punto attivo del cursore o alla finestra che ha acquisito il mouse. Il sistema usa questo messaggio per determinare se inviare un messaggio del mouse su un'area client o non client. Un'applicazione che deve ricevere messaggi di movimento del mouse e pulsante del mouse deve passare il messaggio WM_NCHITTEST alla funzione DefWindowProc .
Il parametro lParam del messaggio WM_NCHITTEST contiene le coordinate dello schermo del punto attivo del cursore. La funzione DefWindowProc esamina le coordinate e restituisce un valore hit test che indica la posizione del punto critico. Il valore di hit test può essere uno dei valori seguenti.
Valore | Posizione dell'area di accesso frequente |
---|---|
HTBORDER | Nel bordo di una finestra che non dispone di un bordo di ridimensionamento. |
HTBOTTOM | Nel bordo inferiore orizzontale di una finestra. |
HTBOTTOMLEFT | Nell'angolo inferiore sinistro di un bordo finestra. |
HTBOTTOMRIGHT | Nell'angolo inferiore destro di un bordo finestra. |
HTCAPTION | In una barra del titolo. |
HTCLIENT | In un'area client. |
HTCLOSE | In un pulsante Chiudi . |
HTERROR | Sullo sfondo dello schermo o su una linea di divisione tra finestre (come HTNOWHERE, ad eccezione del fatto che la funzione DefWindowProc produce un segnale acustico di sistema per indicare un errore). |
HTGROWBOX | In una casella di dimensioni (uguale a HTSIZE). |
HTHELP | In un pulsante ? |
HTHSCROLL | In una barra di scorrimento orizzontale. |
HTLEFT | Nel bordo sinistro di una finestra. |
HTMENU | In un menu. |
HTMAXBUTTON | In un pulsante Ingrandisci . |
HTMINBUTTON | In un pulsante Riduci a icona . |
HTNOWHERE | Sullo sfondo dello schermo o su una linea di divisione tra finestre. |
HTREDUCE | In un pulsante Riduci a icona . |
HTRIGHT | Nel bordo destro di una finestra. |
HTSIZE | In una casella di dimensioni (uguale a HTGROWBOX). |
HTSYSMENU | In un menu Di sistema o in un pulsante Chiudi in una finestra figlio. |
HTTOP | Nel bordo superiore orizzontale di una finestra. |
HTTOPLEFT | Nell'angolo superiore sinistro di un bordo finestra. |
HTTOPRIGHT | Nell'angolo superiore destro di un bordo finestra. |
HTTRANSPARENT | In una finestra attualmente coperta da un'altra finestra nello stesso thread. |
HTVSCROLL | Nella barra di scorrimento verticale. |
HTZOOM | In un pulsante Ingrandisci . |
Se il cursore si trova nell'area client di una finestra, DefWindowProc restituisce il valore hit test HTCLIENT alla routine della finestra. Quando la routine della finestra restituisce questo codice al sistema, il sistema converte le coordinate dello schermo del cursore nelle coordinate client e quindi inserisce il messaggio appropriato dell'area client del mouse.
La funzione DefWindowProc restituisce uno degli altri valori di hit test quando il cursore si trova nell'area non client di una finestra. Quando la routine della finestra restituisce uno di questi valori di hit test, il sistema invia un messaggio del mouse dell'area non client, inserendo il valore di hit test nel parametro wParam del messaggio e le coordinate del cursore nel parametro lParam.
Mouse Sonar
La funzionalità di accessibilità Mouse Sonar mostra brevemente diversi cerchi concentrici intorno al puntatore quando l'utente preme e rilascia il tasto CTRL. Questa funzionalità consente a un utente di individuare il puntatore del mouse su uno schermo disordinato o con risoluzione impostata su alto, su un monitor di qualità scarsa o per gli utenti con problemi di vista. Per altre informazioni, vedere i flag seguenti in SystemParametersInfo:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Mouse Vanish
La funzionalità di accessibilità Mouse Vanish nasconde il puntatore quando l'utente digita. Il puntatore del mouse viene nuovamente visualizzato quando l'utente sposta il mouse. Questa funzionalità impedisce al puntatore di nascondere il testo digitato, ad esempio, in un messaggio di posta elettronica o in un altro documento. Per altre informazioni, vedere i flag seguenti in SystemParametersInfo:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Rotellina del mouse
La rotellina del mouse combina le caratteristiche di una rotellina e un pulsante del mouse. La ruota ha tacche discrete, a spaziatura uniforme. Quando si ruota la rotellina, viene inviato un messaggio di rotellina all'applicazione man mano che viene rilevata ogni notch. Il pulsante della rotellina può anche funzionare come un normale pulsante centrale di Windows (terzo). Premendo e rilasciando la rotellina del mouse, i messaggi standard WM_MBUTTONUP e WM_MBUTTONDOWN. Facendo doppio clic sul terzo pulsante viene inviato il messaggio di WM_MBUTTONDBLCLK standard.
La rotellina del mouse è supportata tramite il messaggio di WM_MOUSEWHEEL .
La rotazione del mouse invia il messaggio di WM_MOUSEWHEEL alla finestra dello stato attivo. La funzione DefWindowProc propaga il messaggio all'elemento padre della finestra. Non dovrebbe essere presente alcun inoltro interno del messaggio, poiché DefWindowProc lo propaga fino alla catena padre fino a quando non viene trovata una finestra che lo elabora.
Determinazione del numero di righe di scorrimento
Le applicazioni devono usare la funzione SystemParametersInfo per recuperare il numero di righe di scorrimento di un documento per ogni operazione di scorrimento (notch della rotellina). Per recuperare il numero di righe, un'applicazione effettua la chiamata seguente:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
La variabile "pulScrollLines" punta a un valore intero senza segno che riceve il numero consigliato di righe da scorrere quando la rotellina del mouse viene ruotata senza tasti di modifica:
- Se questo numero è 0, non deve verificarsi alcun scorrimento.
- Se questo numero è WHEEL_PAGESCROLL, il rollio della rotellina deve essere interpretato come clic una volta nella pagina verso il basso o le aree di scorrimento della pagina verso l'alto.
- Se il numero di righe da scorrere è maggiore del numero di righe visualizzabili, l'operazione di scorrimento deve essere interpretata anche come un'operazione di paging verso il basso o la pagina su.
Il valore predefinito per il numero di righe di scorrimento sarà 3. Se un utente modifica il numero di righe di scorrimento, utilizzando il foglio Proprietà mouse in Pannello di controllo, il sistema operativo trasmette un messaggio di WM_SETTINGCHANGE a tutte le finestre di primo livello con SPI_SETWHEELSCROLLLINES specificato. Quando un'applicazione riceve il messaggio di WM_SETTINGCHANGE , può quindi ottenere il nuovo numero di righe di scorrimento chiamando:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Controlli che scorrono
La tabella seguente elenca i controlli con funzionalità di scorrimento (incluse le righe di scorrimento impostate dall'utente).
Controllo | Scorrimento in corso |
---|---|
Modifica controllo | Verticale e orizzontale. |
Controllo casella di riepilogo | Verticale e orizzontale. |
Casella combinata | Quando non viene eliminato, ogni scorrimento recupera l'elemento successivo o precedente. Quando viene eliminato, ogni scorrimento inoltra il messaggio alla casella di riepilogo, che scorre di conseguenza. |
CMD (riga di comando) | Verticale. |
Visualizzazione ad albero | Verticale e orizzontale. |
Visualizzazione elenco | Verticale e orizzontale. |
Scorrimenti su/giù | Un elemento alla volta. |
Scorrimenti barra di avanzamento | Un elemento alla volta. |
Microsoft Rich Edit 1.0 | Verticale. Si noti che il client exchange dispone di versioni personalizzate dei controlli visualizzazione elenco e visualizzazione albero che non dispongono del supporto della rotellina. |
Microsoft Rich Edit 2.0 | Verticale. |
Rilevamento di un mouse con una rotellina
Per determinare se un mouse con una rotellina è connesso, chiamare GetSystemMetrics con SM_MOUSEWHEELPRESENT. Un valore restituito true indica che il mouse è connesso.
L'esempio seguente proviene dalla routine della finestra per un controllo di modifica su più righe:
BOOL ScrollLines(
PWNDDATA pwndData, //scrolls the window indicated
int cLinesToScroll); //number of times
short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation
gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
0,
pulScrollLines,
0);
case WM_MOUSEWHEEL:
/*
* Do not handle zoom and datazoom.
*/
if (wParam & (MK_SHIFT | MK_CONTROL)) {
goto PassToDefaultWindowProc;
}
gcWheelDelta -= (short) HIWORD(wParam);
if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0)
{
int cLineScroll;
/*
* Limit a roll of one (1) WHEEL_DELTA to
* scroll one (1) page.
*/
cLineScroll = (int) min(
(UINT) pWndData->ichLinesOnScreen - 1,
gucWheelScrollLines);
if (cLineScroll == 0) {
cLineScroll++;
}
cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
assert(cLineScroll != 0);
gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
return ScrollLines(pWndData, cLineScroll);
}
break;
Attivazione di finestre
Quando l'utente fa clic su una finestra di primo livello inattiva o sulla finestra figlio di una finestra di primo livello inattiva, il sistema invia il messaggio di WM_MOUSEACTIVATE (tra gli altri) alla finestra di primo livello o figlio. Il sistema invia questo messaggio dopo aver pubblicato il messaggio WM_NCHITTEST nella finestra, ma prima di pubblicare il messaggio pulsante verso il basso. Quando WM_MOUSEACTIVATE viene passato alla funzione DefWindowProc, il sistema attiva la finestra di primo livello e quindi invia il messaggio di pulsante verso il basso alla finestra di primo livello o figlio.
Elaborando WM_MOUSEACTIVATE, una finestra può controllare se la finestra di primo livello diventa la finestra attiva in seguito a un clic del mouse e se la finestra su cui è stato fatto clic riceve il messaggio pulsante verso il basso successivo. A tale scopo, restituire uno dei valori seguenti dopo l'elaborazione WM_MOUSEACTIVATE.
Valore | Significato |
---|---|
MA_ACTIVATE | Attiva la finestra e non rimuove il messaggio del mouse. |
MA_NOACTIVATE | Non attiva la finestra e non rimuove il messaggio del mouse. |
MA_ACTIVATEANDEAT | Attiva la finestra e rimuove il messaggio del mouse. |
MA_NOACTIVATEANDEAT | Non attiva la finestra ma rimuove il messaggio del mouse. |
Vedi anche
Sfruttare i vantaggi dello spostamento del mouse ad alta definizione