Informazioni sui cursori

Windows fornisce un set di cursori standard che possono essere usati dalle applicazioni. Gli identificatori di cursore seguenti sono definiti in WinUser.h:

Valore Significato
IDC_ARROW
MAKEINTRESOURCE(32512)
Selezione normale
IDC_IBEAM
MAKEINTRESOURCE(32513)
Selezione testo
IDC_WAIT
MAKEINTRESOURCE(32514)
Occupato
IDC_CROSS
MAKEINTRESOURCE(32515)
Selezione precisione
IDC_UPARROW
MAKEINTRESOURCE(32516)
Selezione alternativa
IDC_SIZENW edizione Standard
MAKEINTRESOURCE(32642)
Ridimensionamento diagonale 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
Ridimensionamento diagonale 2
IDC_SIZEWE
MAKEINTRESOURCE(32644)
Ridimensionamento orizzontale
IDC_SIZENS
MAKEINTRESOURCE(32645)
Ridimensionamento verticale
IDC_SIZEALL
MAKEINTRESOURCE(32646)
Sposta
IDC_NO
MAKEINTRESOURCE(32648)
Disponibile
IDC_HAND
MAKEINTRESOURCE(32649)
Selezione collegamento
IDC_APPSTARTING
MAKEINTRESOURCE(32650)
Lavoro in background
IDC_HELP
MAKEINTRESOURCE(32651)
Selezione guida
IDC_PIN
MAKEINTRESOURCE(32671)
Selezionare la posizione
IDC_PERSON
MAKEINTRESOURCE(32672)
Selezione persona

Sono disponibili anche diversi cursori aggiuntivi che non hanno identificatori definiti in WinUser.h (o sono considerati obsoleti):

Valore Significato
MAKEINTRESOURCE(32631) Cursore penna.
MAKEINTRESOURCE(32652) Cursore di scorrimento con frecce che puntano a nord e a sud.
MAKEINTRESOURCE(32653) Cursore di scorrimento con frecce che puntano a ovest e a est.
MAKEINTRESOURCE(32654) Cursore di scorrimento con frecce che puntano a nord, sud, est e ovest.
MAKEINTRESOURCE(32655) Cursore di scorrimento con una freccia che punta verso nord.
MAKEINTRESOURCE(32656) Cursore di scorrimento con una freccia rivolta verso sud.
MAKEINTRESOURCE(32657) Cursore di scorrimento con una freccia che punta verso ovest.
MAKEINTRESOURCE(32658) Cursore di scorrimento con una freccia che punta verso est.
MAKEINTRESOURCE(32659) Cursore di scorrimento con frecce che puntano a nord e ovest.
MAKEINTRESOURCE(32660) Cursore di scorrimento con frecce che puntano a nord e est.
MAKEINTRESOURCE(32661) Cursore di scorrimento con frecce che puntano a sud e ovest.
MAKEINTRESOURCE(32662) Cursore di scorrimento con frecce che puntano a sud e a est.
MAKEINTRESOURCE(32663) Cursore cd freccia.

Per informazioni sull'uso di cursori standard, vedere Linee guida .

A ogni cursore standard è associata un'immagine predefinita corrispondente. L'utente o un'applicazione può sostituire l'immagine predefinita associata a qualsiasi cursore standard in qualsiasi momento. Un'applicazione sostituisce un'immagine predefinita usando la funzione SetSystemCursor.

Un'applicazione può usare la funzione GetIconInfo per recuperare l'immagine corrente per un cursore e disegnare il cursore usando la funzione DrawIconEx.

I cursori personalizzati sono progettati per l'uso in un'applicazione specifica e possono essere qualsiasi progettazione definita dallo sviluppatore. La figura seguente mostra diversi cursori personalizzati.

custom cursors, including hand, banana, drum, wristwatch on hand, metronome

I cursori possono essere monocromatici o colori e statici o animati. Il tipo di cursore utilizzato in un particolare sistema di computer dipende dalla visualizzazione del sistema. I vecchi schermi, ad esempio VGA, non supportano il colore o i cursori animati. I nuovi schermi, i cui driver di visualizzazione usano il motore bitmap indipendente dal dispositivo (DIB), li supportano.

I cursori e le icone sono simili e possono essere usati in modo intercambiabile in molte situazioni. L'unica differenza tra di esse è che un'immagine specificata come cursore deve essere nel formato che la visualizzazione può supportare. Ad esempio, un cursore deve essere monocromatico per uno schermo VGA.

Questa panoramica fornisce informazioni sugli argomenti seguenti:

Il punto critico

Nel cursore, un pixel denominato hot spot contrassegna la posizione esatta dello schermo interessata da un evento del mouse, ad esempio facendo clic su un pulsante del mouse. In genere, il punto attivo è il punto focale del cursore. Il sistema tiene traccia e riconosce questo punto come posizione del cursore. Ad esempio, i punti caldi tipici sono il pixel sulla punta di un cursore a forma di freccia e il pixel al centro di un cursore a forma incrociata. Le immagini seguenti illustrano due cursori di un programma di disegno, in cui i punti caldi sono associati alla punta del pennello e al filtro incrociato della vernice.

hot spots on two cursors

Quando si verifica un evento di input del mouse, il driver del mouse converte l'evento in un messaggio del mouse appropriato che include le coordinate del punto attivo. Il sistema invia il messaggio del mouse alla finestra che contiene il punto attivo o alla finestra che acquisisce l'input del mouse. Per altre informazioni, vedere Input del mouse.

Mouse e cursore

Il sistema riflette lo spostamento del mouse spostando di conseguenza il cursore sullo schermo. Quando il cursore si sposta su diverse parti di finestre o in finestre diverse, il sistema (o un'applicazione) modifica l'aspetto del cursore. Ad esempio, quando il cursore attraversa un collegamento ipertestuale, il sistema modifica il cursore da una freccia a una mano.

standard cursor changing to a hand when over a hyperlink

Se il sistema non dispone di un mouse, il sistema visualizza e sposta il cursore solo quando l'utente sceglie determinati comandi di sistema, ad esempio quelli usati per ridimensionare o spostare una finestra. Per fornire all'utente un metodo di visualizzazione e spostamento del cursore quando un mouse non è disponibile, un'applicazione può usare le funzioni del cursore per simulare lo spostamento del mouse. Data questa funzionalità di simulazione, l'utente può usare i tasti di direzione per spostare il cursore.

Creazione del cursore

Poiché i cursori standard sono predefiniti, non è necessario crearli. Per usare un cursore standard, un'applicazione recupera un handle di cursore usando la funzione LoadCursor o LoadImage. Un handle di cursore è un valore univoco del tipo HCURSOR che identifica un cursore standard o personalizzato.

Per creare un cursore personalizzato per un'applicazione, in genere si usa un'applicazione grafica e si include il cursore come risorsa nel file di definizione delle risorse dell'applicazione. In fase di esecuzione chiamare LoadCursor per recuperare l'handle del cursore. Le risorse del cursore contengono dati per diversi dispositivi di visualizzazione. La funzione LoadCursor seleziona automaticamente i dati più appropriati per il dispositivo di visualizzazione corrente. Per caricare un cursore direttamente da un oggetto . CUR o . File ANI, usare la funzione LoadCursorFromFile.

È anche possibile creare un cursore personalizzato in fase di esecuzione usando la funzione CreateIconIndirect, che crea un cursore basato sul contenuto di una struttura ICONINFO. La funzione GetIconInfo riempie questa struttura con coordinate e informazioni relative alla maschera e al colore associati.

Le applicazioni devono implementare cursori personalizzati come risorse e usare LoadCursor, LoadCursorFromFile o LoadImage anziché creare il cursore in fase di esecuzione. L'uso delle risorse cursori evita la dipendenza dei dispositivi, semplifica la localizzazione e consente alle applicazioni di condividere le progettazioni dei cursori.

La funzione CreateIconFromResourceEx consente a un'applicazione di creare icone e cursori in base ai dati delle risorse. CreateIconFromResourceEx crea un cursore basato sui dati delle risorse binari da altri file eseguibili (.exe) o DLL. Deve essere preceduto dalle chiamate alla funzione LookupIconIdFromDirectoryEx , nonché da diverse funzioni di risorsa. LookupIconIdFromDirectoryEx identifica i dati del cursore più appropriati per il dispositivo di visualizzazione corrente. Per altre informazioni sulle funzioni delle risorse, vedere Risorse.

Posizione e aspetto del cursore

Il sistema visualizza automaticamente un cursore per il mouse e ne aggiorna la posizione sullo schermo. È possibile ottenere le coordinate correnti dello schermo del cursore e spostare il cursore in qualsiasi posizione sullo schermo usando rispettivamente le funzioni GetCursorPos e SetCursorPos.

È anche possibile recuperare l'handle sul cursore corrente usando la funzione GetCursor ed è possibile impostare il cursore usando la funzione SetCursor. Dopo aver chiamato SetCursor, l'aspetto del cursore non cambia finché non si sposta il mouse, il cursore viene impostato in modo esplicito su un cursore diverso o viene eseguito un comando di sistema.

Quando l'utente sposta il mouse, il sistema ridisegna il cursore in corrispondenza della nuova posizione. Il sistema ridisegna automaticamente la struttura del cursore associata alla finestra a cui punta il cursore.

È possibile nascondere e riprodurre nuovamente il cursore, senza modificare la progettazione del cursore, usando la funzione ShowCursor. Questa funzione usa un contatore interno per determinare quando nascondere o visualizzare il cursore. Un tentativo di mostrare il cursore incrementa il contatore; un tentativo di nascondere il cursore decrementa il contatore. Il cursore è visibile solo se questo contatore è maggiore o uguale a zero.

La funzione GetCursorInfo ottiene le informazioni seguenti per il cursore globale: se il cursore è nascosto o visualizzato, l'handle al cursore e le coordinate del cursore.

Confine del cursore

È possibile limitare il cursore a un'area rettangolare sullo schermo usando la funzione ClipCursor. Ciò è utile per quando l'utente deve rispondere a un determinato evento all'interno dell'area limitata del rettangolo. Ad esempio, è possibile usare ClipCursor per limitare il cursore a una finestra di dialogo modale, impedendo all'utente di interagire con altre finestre finché la finestra di dialogo non viene chiusa.

La funzione GetClipCursor recupera le coordinate dello schermo dell'area rettangolare in cui il cursore è temporaneamente limitato. Quando è necessario limitare il cursore, è anche possibile usare questa funzione per salvare le coordinate dell'area originale in cui è possibile spostare il cursore. È quindi possibile ripristinare il cursore nell'area originale quando il nuovo confine non è più necessario.

Distruzione del cursore

È possibile eliminare definitivamente l'handle del cursore e liberare la memoria usata chiamando la funzione DestroyCursor. Tuttavia, questa funzione non ha alcun effetto su un cursore condiviso. Un cursore condiviso è valido finché il modulo da cui è stato caricato rimane in memoria. Le funzioni seguenti ottengono un cursore condiviso:

Quando non è più necessario un cursore creato usando la funzione CreateIconIndirect , è necessario eliminare definitivamente il cursore. La funzione DestroyIcon elimina definitivamente l'handle del cursore e libera qualsiasi memoria usata dal cursore. Usare questa funzione solo sui cursori creati con CreateIconIndirect.

Duplicazione cursore

La funzione CopyCursor copia un handle di cursore. Ciò consente all'applicazione o al codice DLL di recuperare l'handle in un cursore di proprietà di un altro modulo. Quindi, se l'altro modulo viene liberato, il modulo che ha copiato il cursore può comunque usare la progettazione del cursore.

Per informazioni su come aggiungere, rimuovere o sostituire le risorse del cursore nei file eseguibili, vedere Risorse.

Cursore della classe Window

Quando si registra una classe window, usando la funzione RegisterClass, è possibile assegnargli un cursore predefinito, noto come cursore di classe. Dopo che l'applicazione registra la classe window, ogni finestra della classe ha il cursore di classe specificato.

Per eseguire l'override del cursore della classe, elaborare il messaggio WM_edizione Standard TCURSOR. È anche possibile sostituire un cursore di classe usando la funzione SetClassLong. Questa funzione modifica le impostazioni predefinite della finestra per tutte le finestre di una classe specificata. Per altre informazioni, vedere Cursore di classe.