Я настоятельно рекомендую прочитать:
https://docs.microsoft.com/de-de/windows/desktop/menurc/about-cursors
К вашему коду:
Маски и данные ICONINFO
s содержат HBITMAPS
но функция CreateCursor
API требует простых битовых данных.
Кроме того, API `CreateCursor`, похоже, вообще не поддерживает цвета.
Пожалуйста, посмотрите на https://docs.microsoft.com/de-de/windows/desktop/menurc/using-cursors
Документация ICONINFO
гласит, что hbmMask содержит части AND
и XOR
:
hbmMask
Тип: HBITMAP
Значок битовой маски растрового изображения. Если эта структура определяет черный и белый
значок, эта битовая маска отформатирована так, чтобы верхняя половина была иконкой И
битовая маска и нижняя половина - это значок битовой маски XOR. Под этим
при условии, высота должна быть кратна двум. Если это
структура определяет цветную иконку, эта маска определяет только битовую маску AND
иконы.
(https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-_iconinfo)
к общей проблеме:
документация также гласит:
Приложения должны реализовывать пользовательские курсоры в качестве ресурсов и использовать
LoadCursor, LoadCursorFromFile или LoadImage вместо создания
курсор во время выполнения. Использование ресурсов курсора позволяет избежать зависимости от устройства,
упрощает локализацию и позволяет приложениям совместно использовать курсор
дизайн.
И помощь для функции SetCursor
предлагает:
HCURSOR
Тип: HCURSOR
Дескриптор к курсору. Курсор должен быть создан
Функция CreateCursor или загружается с помощью LoadCursor или LoadImage
функция. Если этот параметр имеет значение NULL, курсор удаляется из
экран.
(https://docs.microsoft.com/de-de/windows/desktop/api/Winuser/nf-winuser-setcursor)
Так что кажется, что вы можете просто передать дескриптор загруженного изображения в эту функцию.
Документация CreateIconIdirect
предполагает, что HCURSOR
с и HICON
с являются взаимозаменяемыми:
Создает значок или курсор из структуры ICONINFO.
(https://docs.microsoft.com/en-us/windows/desktop/api/Winuser/nf-winuser-createiconindirect)