Я знаю, этот вопрос очень бесполезен, потому что есть Microsoft Docs et c. Но я просто не понимаю. Я пытаюсь загрузить пользовательский курсор с помощью функции SetSytemCursor. Я уже добавил его в файл ресурсов, и он определен как CustomCursor CURSOR 9 в заголовочном файле resource1.h. Я пытался загрузить файл разными способами, но ни один из них не сработал. Вот мой текущий код: (ПРИМЕЧАНИЕ. Эта функция вызывается в main. Мой проект использует несколько исходных файлов.)
#include "resource1.h"
void changeCursorPayload() {
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(CustomCursor), RT_CURSOR);
if (hResource)
{
HGLOBAL hLoadedResource = LoadResource(NULL, hResource);
if (hLoadedResource)
{
LPVOID pLockedProcedure = LockResource(hLoadedResource);
if (pLockedProcedure)
{
DWORD dwResourceSize = SizeofResource(NULL, hResource);
if (0 != dwResourceSize)
{
HINSTANCE hInstance;
HCURSOR cursor = (HCURSOR)LoadCursor(NULL, CustomCursor);
////Setup a loop to enable one cursor globally.
for (int cursorStyle = 32512; cursorStyle < 32640; cursorStyle++)
SetSystemCursor(cursor, 32512);
}
}
}
}
Я также пытался использовать bin2 c (https://sourceforge.net/projects/bin2c/), который сгенерирует C исходный файл курсора, но я понятия не имею, как это реализовать. Сгенерированный исходный файл:
const long int cursor_cur_size = 4286;
const unsigned char cursor_cur[4286] = {
0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, etc..
};
Если кто-то может мне помочь и показать мне, как загружать значки и курсоры из файлов ресурсов, это было бы здорово.
РЕДАКТИРОВАТЬ: Предупреждения времени компиляции :
In file included from Payloads/ChangeCursor.c:3,
from Payloads/payloads.h:13,
from main.h:14,
from main.c:21:
Payloads/ChangeCursor.c: In function 'changeCursorPayload':
Payloads/../resource1.h:5:41: warning: passing argument 2 of 'LoadCursorA' makes pointer from integer without a cast [-Wint-conversion]
5 | #define CustomCursor 9
| ^
| |
| int
Payloads/ChangeCursor.c:294:64: note: in expansion of macro 'CustomCursor'
294 | HCURSOR cursor = (HCURSOR)LoadCursor(NULL, CustomCursor);
| ^~~~~~~~~~~~
In file included from c:\gcc\x86_64-w64-mingw32\include\windows.h:72,
from c:\gcc\x86_64-w64-mingw32\include\rpc.h:16,
from c:\gcc\x86_64-w64-mingw32\include\wtypesbase.h:7,
from c:\gcc\x86_64-w64-mingw32\include\shlobj.h:9,
from main.c:19:
c:\gcc\x86_64-w64-mingw32\include\winuser.h:3954:68: note: expected 'LPCSTR' {aka 'const char *'} but argument is of type 'int'
3954 | WINUSERAPI HCURSOR WINAPI LoadCursorA(HINSTANCE hInstance,LPCSTR lpCursorName);
| ~~~~~~~^~~~~~~~~~~~