Здравствуйте. Изменил системный курсор Код (ASM): invoke LoadCursorFromFileA,&FileName mov hCursor,rax invoke SetSystemCursor,hCursor,OCR_NORMAL Вернуть системный курсор через DestroyCursor, LoadCursor, SetCursor не получается, только хардкор, только перезагрузка. Подскажите как?
Не знаю, правильно или нет, но работает Код (ASM): wmCREATE:invoke LoadCursorA,0,IDC_ARROW invoke CopyIcon,rax mov hOldCursor,rax invoke LoadCursorFromFileA,&FileName mov hNewCursor,rax invoke SetSystemCursor,rax,OCR_NORMAL . . . . . wmDESTROY:invoke DestroyCursor,hNewCursor invoke SetSystemCursor,hOldCursor,OCR_NORMAL
Майкрософт в явном виде предлагает передавать вместо hInst NULL функции LoadCursor (A или W) и обещает, что системный курсор с соответствующим идентификатором будет загружен при этом, как обычно, деликатно умалчивают, следует ли уничтожать такой/этот курсор при завершении процесса ) мне кажется, тут избыточно загружать некий другой курсор и перещелкивать системный сначала на него, а после на тот, что мы получили от системы как дефолтный если, конечно, система не реагирует на теребонькание в духе "покажь, что у тебя за курсор "стрелка" и теперь-ка сделай его по умолчанию" - тогда, наверное, отвлечь её заведомо иным курсором имеет смысл при этом в ответ на WM_DESTROY мне не кажется правильным уничтожать этот левый курсор до того, как он был выведен из поля зрения системы заменой его на оригинальный есть надежда, что система где-то ведет счетчик ссылок на каждый такой объект и не лезет реально освобождать память, им занятую (а равно и не лезет в преждевременно освобожденный курсор, если его понадобилось отрисовать на экране) - но я не был бы оптимистом, хаха.