Как изменить несколько курсоров для всей системы в Windows API - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь заменить несколько системных курсоров, используя SetSystemCursor.Мой первый вызов меняет курсор на OCR_NORMAL, но последующие вызовы не работают.

HCURSOR hWaitCur = LoadCursor(NULL, IDC_WAIT);
HCURSOR cursorCopy = CopyCursor(hWaitCur);

SetSystemCursor(cursorCopy, OCR_NORMAL); // This works

// Not working
SetSystemCursor(cursorCopy, OCR_APPSTARTING); 
SetSystemCursor(cursorCopy, OCR_CROSS);
SetSystemCursor(cursorCopy, OCR_HAND);
SetSystemCursor(cursorCopy, OCR_HELP);
SetSystemCursor(cursorCopy, OCR_IBEAM); 
SetSystemCursor(cursorCopy, OCR_NO);
SetSystemCursor(cursorCopy, OCR_WAIT);

Как правильно обновить несколько курсоров системы одновременно?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Из документов (подчеркну мной):

Система уничтожает hcur , вызывая функцию DestroyCursor.Следовательно, hcur не может быть курсором, загруженным с помощью функции LoadCursor.Чтобы указать курсор, загруженный из ресурса, скопируйте курсор с помощью функции CopyCursor, а затем передайте копию SetSystemCursor.

Так что вам нужно копировать ее перед каждым вызовом:

SetSystemCursor(CopyCursor(hWaitCur), OCR_NORMAL);
SetSystemCursor(CopyCursor(hWaitCur), OCR_APPSTARTING); 
SetSystemCursor(CopyCursor(hWaitCur), OCR_CROSS);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HAND);
SetSystemCursor(CopyCursor(hWaitCur), OCR_HELP);
SetSystemCursor(CopyCursor(hWaitCur), OCR_IBEAM); 
SetSystemCursor(CopyCursor(hWaitCur), OCR_NO);
SetSystemCursor(CopyCursor(hWaitCur), OCR_WAIT);
0 голосов
/ 25 сентября 2018

Я нашел решение.

Поскольку SetSystemCursor уничтожает cursorCopy после настройки, необходимо повторно hWaitCur для каждого вызова.

/* ... */

HCURSOR cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_APPSTARTING);

cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_NORMAL);

cursorCopy = CopyCursor(cursor);
SetSystemCursor(cursorCopy, OCR_CROSS);

/* ... */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...