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 utente. L'applicazione deve fornire anche il supporto completo della tastiera.

Un'applicazione riceve l'input del mouse sotto forma di messaggi inviati o pubblicati nelle 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 hot spot, 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 di accesso in genere riceve 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 gestisce 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 di scelta rapida 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 finché l'utente fa clic su una finestra creata da un altro thread.

Quando l'acquisizione del mouse cambia, il sistema invia un messaggio WM_CAPTURECHANGED alla finestra che perde 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 di sfondo tenta di acquisire l'input del mouse, riceve 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 del pulsante del mouse verso il basso, seguendo il cursore fino a quando non si verifica un evento di aumento del pulsante del mouse. 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 su pulsante.

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 del mouse primario dopo un singolo clic. Per un'applicazione, il pulsante appare ancora premuto verso il basso. 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 menu più facilmente. 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 mouse a pulsante singolo 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 in modo minimo, se tutto.

Le applicazioni possono anche supportare una rotellina del mouse. La rotellina del mouse può essere premuta o ruotata. Quando la rotellina del mouse viene premuta, funge da pulsante centrale (terzo), inviando normali messaggi di pulsante centrale all'applicazione. Quando viene ruotata, viene inviato un messaggio a rotelle all'applicazione. Per altre informazioni, vedere La sezione Ruota del mouse .

Le applicazioni possono supportare i pulsanti di comando dell'applicazione. Questi pulsanti, denominati pulsanti X, sono progettati per consentire un accesso più semplice a un browser Internet, posta elettronica e servizi multimediali. Quando viene premuto 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 a sinistra, l'applicazione può usare la funzione SwapMouseButton per invertire il significato dei pulsanti del mouse sinistro e destro. 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 da ripristinare il significato dei pulsanti influisce su tutte le applicazioni.

XBUTTONs

Windows supporta un mouse con cinque pulsanti. Oltre ai pulsanti sinistro, centrale e destro sono disponibili XBUTTON1 e XBUTTON2, che forniscono navigazione indietro e avanti quando si usa il browser.

Gestione finestre supporta i messaggi 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 XBUTTON1 e XBUTTON2 seguente:

Le API seguenti sono state modificate per supportare questi pulsanti:

È improbabile che una finestra figlio in un'applicazione componente possa implementare direttamente i comandi per XBUTTON1 e XBUTTON2. Quindi DefWindowProc invia un messaggio di WM_APPCOMMAND a una finestra quando viene fatto clic su un pulsante X. DefWindowProc invia anche il messaggio WM_APPCOMMAND alla finestra padre. 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 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 che dispongono di tasti aggiuntivi per funzioni del browser, funzioni multimediali, avvio dell'applicazione 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 pubblica nella coda dei messaggi del thread appropriato. Quando i messaggi del mouse vengono pubblicati più velocemente di un thread, il sistema elimina tutto, 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 di area client e messaggi di area non client. In genere, un'applicazione elabora i messaggi dell'area client e ignora i messaggi di 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 inserisce il messaggio WM_MOUSEMOVE nella finestra quando l'utente sposta il cursore all'interno dell'area client. Pubblica uno dei messaggi seguenti quando l'utente preme o rilascia un pulsante del mouse mentre il cursore si trova all'interno dell'area client.

Messaggio Significato
WM_LBUTTONDBLCLK Il pulsante sinistro del mouse è stato fatto doppio clic.
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 Il pulsante destro del mouse è stato fatto doppio clic.
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 avere il sistema invia due altri messaggi. Pubblica il messaggio WM_MOUSEHOVER quando il cursore passa il puntatore del mouse sull'area client per un determinato periodo di tempo. Pubblica il messaggio WM_MOUSELEAVE quando il cursore lascia l'area client.

Parametri del messaggio

Il parametro lParam di un messaggio del mouse dell'area client indica la posizione del cursore a caldo. La parola a basso ordine indica la coordinata x del punto caldo e la parola ad ordine elevato indica la coordinata y. Le coordinate vengono specificate nelle coordinate client. Nel sistema di coordinate client vengono specificati tutti i punti sullo schermo rispetto 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 è giù.
MK_MBUTTON Il pulsante centrale del mouse è giù.
MK_RBUTTON Il pulsante destro del mouse è giù.
MK_SHIFT Il tasto MAIUSC è inattivo.
MK_XBUTTON1 Il primo pulsante X è giù.
MK_XBUTTON2 Il secondo pulsante X è giù.

 

messaggi Double-Click

Il sistema genera un messaggio doppio clic quando l'utente fa doppio clic su un pulsante del mouse due volte in successione rapida. Quando l'utente fa clic su un pulsante, il sistema stabilisce un rettangolo centrato intorno al punto di scelta rapida 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 di accesso è ancora all'interno del rettangolo e calcola il tempo trascorso dal primo clic. Se il punto di accesso frequente è ancora all'interno del rettangolo e il tempo trascorso non supera il valore di timeout 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 di SPI_SETDOUBLECLKWIDTH e SPI_SETDOUBLECLKHEIGHT su SystemParametersInfo. Si noti, tuttavia, che l'impostazione del valore doppio click-timeout e rettangolo influisce su tutte le applicazioni.

Per impostazione predefinita, una finestra definita dall'applicazione non riceve messaggi con doppio clic. A causa del sovraccarico del sistema coinvolto nella generazione di messaggi a doppio clic, questi messaggi vengono generati solo per le classi appartenenti alle classi che hanno lo stile della classe CS_DBLCLKS . L'applicazione deve impostare questo stile durante la registrazione della classe della finestra. Per altre informazioni, vedere Classi di finestra.

Un messaggio a doppio clic è sempre il terzo messaggio in 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 pulsante.the second click generate the double-click message seguito da un altro messaggio button-up. Ad esempio, facendo doppio clic sul pulsante sinistro del mouse viene generata la sequenza di messaggio seguente:

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

Poiché una finestra riceve sempre un messaggio 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à avviata 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 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 della 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 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.

È presente 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 che contiene 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 dell'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 dell'area sensibile del cursore. La funzione DefWindowProc esamina le coordinate e restituisce un valore di hit test che indica la posizione dell'area di accesso frequente. 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 orizzontale inferiore 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 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 in coordinate client e quindi inserisce il messaggio del mouse dell'area client appropriato.

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

Ruota del mouse

La rotellina del mouse combina le caratteristiche di una ruota e un pulsante del mouse. La ruota ha notche discrete, uniformemente spaziate. Quando si ruota la rotellina, viene inviato un messaggio a rotellina all'applicazione quando viene rilevata ogni notch. Il pulsante della rotellina può anche funzionare come normale pulsante centrale di Windows (terzo). Premere e rilasciare la rotellina del mouse invia messaggi di WM_MBUTTONUP standard 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 deve essere presente alcun inoltro interno del messaggio, poiché DefWindowProc lo propaga fino a quando non viene trovata una finestra che 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 ruota). 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 suggerito 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, un rollio della rotellina deve essere interpretato come fare clic una sola volta nella pagina verso il basso o nelle aree su su della barra di scorrimento.
  • Se il numero di righe da scorrere è maggiore del numero di righe visualizzabili, l'operazione di scorrimento deve essere interpretata anche come operazione di pagina verso l'alto o verso l'alto.

Il valore predefinito per il numero di righe di scorrimento sarà 3. Se un utente modifica il numero di righe di scorrimento, usando il foglio Proprietà mouse in Pannello di controllo, il sistema operativo trasmette un messaggio 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 scorrere

La tabella seguente elenca i controlli con funzionalità di scorrimento (incluse le righe di scorrimento impostate dall'utente).

Control Scorrimento
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 della barra di traccia Un elemento alla volta.
Microsoft Rich Edit 1.0 Verticale. Nota, il client Exchange ha le proprie versioni dei controlli visualizzazione elenco e visualizzazione albero che non dispongono del supporto della ruota.
Microsoft Rich Edit 2.0 Verticale.

 

Rilevamento di un mouse con una ruota

Per determinare se un mouse con una rotellina è connesso, chiamare GetSystemMetrics con SM_MOUSEWHEELPRESENT. Un valore restituito di TRUE indica che il mouse è connesso.

L'esempio seguente è dalla procedura della finestra per un controllo di modifica multilinea:

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 principale o figlio. Il sistema invia questo messaggio dopo aver pubblicato il messaggio di WM_NCHITTEST alla finestra, ma prima di pubblicare il messaggio sul pulsante verso il basso. Quando WM_MOUSEACTIVATE viene passata alla funzione DefWindowProc , il sistema attiva la finestra di primo livello e quindi pubblica il messaggio a discesa del pulsante alla finestra principale 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 giù successivo. Viene quindi restituito uno dei valori seguenti dopo l'elaborazione WM_MOUSEACTIVATE.

Valore Significato
MA_ACTIVATE Attiva la finestra e non elimina il messaggio del mouse.
MA_NOACTIVATE Non attiva la finestra e non elimina il messaggio del mouse.
MA_ACTIVATEANDEAT Attiva la finestra e rimuove il messaggio del mouse.
MA_NOACTIVATEANDEAT Non attiva la finestra ma elimina il messaggio del mouse.

Vedi anche

Sfruttare High-Definition movimento del mouse