2012-06-03 12 views
5

ho cambiato il cursore di sistema con SetSystemCursor ma quando provo a reimpostare il cursore di sistema su Nornale con DestroyCursor non succede nulla !!Ripristina il cursore di sistema personalizzato normale

Qualche idea?

Grazie!

+0

Perché utilizzare un'API per questo? [Cursor static class] (http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.aspx) non funziona per te? – Steve

+0

Normalmente si salverebbe il cursore del curren, lo si cambierà e, una volta terminato, lo si ridurrà a wat era con un'altra chiamata a SetSystemCursor –

risposta

4

Come documentato, la funzione SetSystemCursor() già distrugge il cursore passato, quindi distruggerlo di nuovo non avrà alcun effetto.

Avrai bisogno di memorizzare una copia del vecchio cursore in modo da poter ripristinare in un secondo momento:

// Global Variables: 
HCURSOR hOldCursor; 
... 
    hOldCursor = CopyCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW))); 
    HCURSOR hNewCursor = CopyCursor(LoadCursor(hInstance, MAKEINTRESOURCE(IDC_MYCURSOR))); 
    SetSystemCursor(hNewCursor, OCR_NORMAL); 

e ripristinare in questo modo:

SetSystemCursor(hOldCursor, OCR_NORMAL); 
DestroyCursor(hOldCursor); 
hOldCursor = NULL; 

nota il notevole dolore che causa quando il tuo programma termina senza ripristinare il cursore. Come sperimentato da me testando questo codice. Cambiare i cursori di sistema è abbastanza ostile poiché ha un effetto globale su tutti gli altri programmi che girano sul desktop.

3

In alternativa, è possibile ripristinare i cursori di sistema per default come questo:

SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0); 

dove SPI_SETCURSORS è definito come 0x0057, come descritto here

Problemi correlati