2012-06-03 10 views
5

ich ändere den Systemcursor mit SetSystemCursor, aber wenn ich versuche, den Systemcursor mit DestroyCursor auf nornal zurückzusetzen, passiert nichts !!Zurücksetzen des benutzerdefinierten Systemcursors auf normal

Irgendwelche Ideen?

Dank!

+0

Warum Sie eine API für das verwenden Sie? [Cursor statische Klasse] (http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.aspx) funktioniert nicht für Sie? – Steve

+0

Normalerweise würden Sie den aktuellen Cursor speichern, ändern und dann, wenn Sie fertig sind, setzen Sie ihn wieder auf wat, mit einem anderen Aufruf von SetSystemCursor –

Antwort

4

Wie dokumentiert, zerstört die SetSystemCursor() - Funktion bereits den übergebenen Cursor, so dass die erneute Zerstörung keinen Effekt hat.

Sie erhalten eine Kopie des alten Cursor speichern müssen, damit Sie es später wiederherstellen können:

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

Und es wie folgt wieder her:

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

Notiere die erhebliche Schmerzen verursachen, wenn Sie Ihr Programm wird beendet, ohne den Cursor wiederherzustellen. Wie ich erfahren habe, habe ich diesen Code getestet. Das Ändern von Systemcursors ist ziemlich unfreundlich, da es sich auf alle anderen Programme auswirkt, die auf dem Desktop ausgeführt werden.

3

Alternativ können Sie Systemcursor auf die Standardwerte wie folgt wiederherstellen:

SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0); 

wo SPI_SETCURSORS als 0x0057 definiert ist, wie here beschrieben

Verwandte Themen