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

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:

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:

  1. WM_LBUTTONDOWN
  2. WM_LBUTTONUP
  3. WM_LBUTTONDBLCLK
  4. WM_LBUTTONUP

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