CreateCursor с использованием ICONINFO - PullRequest
0 голосов
/ 28 марта 2019

Можно ли создать курсор из ICONINFO iconinfo.hbmMask и iconinfo.hbmColor, используя CreateCursor

Передача iconinfo.hbmMask как AND и iconinfo.hbmColor как XOR в CreateCursor исключение.

HICON Create_Cursor(CURSORINFO CursorInfo)
{   
    ICONINFO iconinfo;
    HICON hIcon = NULL;

    bool bIconInfo = GetIconInfo(CursorInfo.hCursor,&iconinfo);

    if(!bIconInfo)
    {
        // GetIconInfo failed.
    }

    hIcon = CreateCursor(   NULL,
                            iconinfo.xHotspot,
                            iconinfo.yHotspot,
                            32,
                            32,
                            iconinfo.hbmMask,
                            iconinfo.hbmColor   );

    if(hIcon == NULL)
    {
        // CreateCursor failed.
    }
    return hIcon;
}

CreateCursor не пройден после передачи ICONINFO, Как я могу получить HCURSOR, используя CreateCursor API ... Нет подходящих примеров в интернете о CreateCursor эта статья поможет, если кто-то ответит. Спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Я настоятельно рекомендую прочитать:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...