Укажите индекс HICON при вызове CreateBitmapFromHIcon в WIC - PullRequest
0 голосов
/ 04 ноября 2019

Согласно документации ExtractIconEx возвращает указатель на массив HICON. Как я могу указать, какой элемент в этом массиве использовать при передаче CreateBitmapFromHICON .

#include <iostream>
        #include <Windows.h>
        #include <Wincodec.h>
        #pragma comment(lib,"Windowscodecs.lib")

HICON hiconLarge = NULL;
HICON hiconSmall = NULL;

int main()
{
    CoInitialize(NULL);
    double x, y;

    IWICImagingFactory* piFactory = NULL;
    IWICBitmap* piBitmap = NULL;

    //Create the COM imaging factory.
    HRESULT hr = CoCreateInstance(
        CLSID_WICImagingFactory,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_IWICImagingFactory,
        (LPVOID*)&piFactory);

    UINT nIcons;
    nIcons = ExtractIconEx(L"c:\\windows\\system32\\shell32.dll",
        -1,
        NULL,
        NULL,
        0);

        ExtractIconEx(L"c:\\windows\\system32\\shell32.dll",
        0,
        &hiconLarge,
        &hiconSmall,
        nIcons);

    std::cout << nIcons << " icons found." << std::endl;

    HRESULT hResult = piFactory->CreateBitmapFromHICON(hiconLarge, &piBitmap);
    if (hResult == S_OK)
    {
        piBitmap->GetResolution(&x, &y);
        std::cout << "Resolution x=" << x << " y=" << y << std::endl;
    }
}

1 Ответ

2 голосов
/ 04 ноября 2019

Вам необходимо выделить достаточно места для значений nIcons HICON перед вторым вызовом ExtractIconEx, поэтому hiconLarge и hiconSmall должны быть указателями на объекты HICON (HICON *). В настоящее время у вас достаточно места только для одного. Затем вы получаете доступ к значениям, которые вы обычно делаете с массивами.

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