2012-06-03 15 views
5

Zmieniam kursor systemowy za pomocą SetSystemCursor, ale kiedy spróbuję zresetować kursor systemowy do nornal za pomocą DestroyCursor nic się nie stanie !!Zresetuj niestandardowy kursor systemowy do normalnego stanu

Wszelkie pomysły?

Dzięki!

+0

Dlaczego używacie API dla tego? [Cursor static class] (http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.aspx) nie działa dla Ciebie? – Steve

+0

Zwykle można zapisać kursor, zmienić go, a po zakończeniu ustawić go ponownie, aby był z innym wywołaniem SetSystemCursor –

Odpowiedz

4

Jak udokumentowano, funkcja SetSystemCursor() już niszczy przekazany kursor, więc jego ponowne zniszczenie nie będzie miało żadnego efektu.

Musisz przechowywać kopię starego kursora, dzięki czemu można ją później przywrócić:

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

i przywrócić go tak:

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

Uwaga znaczny ból spowodować kiedy Twój program kończy się bez przywracania kursora. Jako doświadczony przeze mnie testowanie tego kodu. Zmiana kursorów systemu jest dość nieprzyjazna, ponieważ ma globalny wpływ na wszystkie inne programy uruchamiane na pulpicie.

3

Alternatywnie, można przywrócić do ustawień systemowych kursorów tak:

SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0); 

gdzie SPI_SETCURSORS jest zdefiniowany jako 0x0057, jak opisano here

Powiązane problemy