Загрузка и использование ресурсов C - PullRequest
0 голосов
/ 04 мая 2020

Я знаю, этот вопрос очень бесполезен, потому что есть 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);
      |                                                             ~~~~~~~^~~~~~~~~~~~
...