Я пытаюсь изменить курсор моей мыши с помощью файла .cur в файле ресурсов.
Когда я пробую свой код, я получаю эту ошибку:
Возникла исключительная ситуация в 0x77EB7392 (ntdll.dll) в CleanResourceFiles.exe: 0xC0000005: нарушение прав доступа при чтении местоположения 0x00000066.
Вот код:
HCURSOR curs = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_CURSOR1), 2, 0, 0, LR_LOADFROMFILE);
SetSystemCursor(curs, 32512);
Замечания : IDC_CURSOR1
мой курсор и 32512
идентификатор классического курсора со стрелкой Я также включил <Windows.h>
и мой resource.h
,
Я использую Visual Studio Community 2017, с Win10.
Я пробовал другие функции, такие как LoadCursor()
, Код выше взят из «VineMemz».
Наконец, когда я попытался изменить курсор с помощью LoadFromFile()
используя путь к моему .cur
файл, это работает.
При звонке LoadImage()
вы указываете LR_LOADFROMFILE
флаг, так что lpszName
Параметр будет интерпретироваться как указатель на строку с нулевым символом в конце, содержащую путь к .cur
файл для загрузки. Но вы передаете идентификационный номер ресурса вместо строки пути к файлу (я предполагаю, IDC_CURSOR1
равен 102 (0x66), что соответствует адресу памяти, указанному в сообщении об ошибке). Вам нужно избавиться от LR_LOADFROMFILE
флаг при загрузке изображения из ресурсов.
Кроме того, вам нужно передать фактический дескриптор модуля EXE в hinst
параметр, а не NULL (NULL можно использовать только при загрузке изображений, определенных OEM).
Также. вы не должны использовать «магические числа». 2
на LoadImage()
следует заменить на IMAGE_CURSOR
постоянная, а 32512
на SetSystemCursor()
следует заменить на OCR_NORMAL
постоянная.
Попробуй это:
HCURSOR curs = (HCURSOR) LoadImage(GetModuleHandle(), MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 0, 0, 0);
SetSystemCursor(curs, OCR_NORMAL);
Других решений пока нет …