Загрузка растрового значка из ресурсов в расширении оболочки обработчика значков - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно загрузить значок .bmp из ресурсов в IExtractIcon::Extract, но я не могу понять, почему он не работает. Я продолжаю получать черный или белый прямоугольник там, где должен быть значок.

enter image description here

У меня в ресурсах проекта объявлены две иконки .rc file: ICON_16_BITMAP и ICON_BITMAP. Значки обязательно должны быть загружены, так как они не равны нулю после LoadImageW.

// IExtractIcon

HRESULT icon_handler::GetIconLocation(UINT u_flags, PWSTR psz_icon_file, UINT cch_max, int* pi_index, UINT* pw_flags)
{
    *pw_flags = GIL_NOTFILENAME | GIL_DONTCACHE;
    return S_OK;
}

extern HINSTANCE global_h_instance;

HRESULT icon_handler::Extract(PCWSTR psz_file, UINT n_icon_index, HICON* phicon_large, HICON* phicon_small, UINT n_icon_size)
{
    const int small_size = HIWORD(n_icon_size);
    const int large_size = LOWORD(n_icon_size);

    if (phicon_large != nullptr)
    {
        OutputDebugStringW((L"Extract large icon: " + std::to_wstring(large_size)).c_str());

        *phicon_large = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_BITMAP), IMAGE_BITMAP, large_size, large_size,
            LR_SHARED));
    }
    if (phicon_small != nullptr)
    {
        OutputDebugStringW((L"Extract small icon: " + std::to_wstring(small_size)).c_str());

        *phicon_small = HICON(LoadImageW(global_h_instance, MAKEINTRESOURCE(ICON_16_BITMAP), IMAGE_BITMAP, small_size, small_size,
            LR_SHARED));
    }

    return S_OK;
}

Я пытался следовать многим урокам, но мне кажется, что это просто, но пока ничего не получается. Есть ли что-то, что может быть причиной, по которой значок не работает?

1 Ответ

1 голос
/ 10 апреля 2019

BMP отличается от формата значков.

Нельзя принудительно конвертировать с помощью HICON.

Самый простой способ - преобразовать файл BMP в файл значков путем преобразования инструмента изображения и затем загрузить его в ресурс.

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