Как получить значок открытой папки с помощью метода SHGetFileInfo()?

Вот что я сделал:

LPMALLOC malloc;
LPITEMIDLIST pidl;
SHFILEINFO FileInfo;
SFGAOF sfGao;

if (SUCCEEDED(SHGetMalloc(&malloc))
{
    if (SUCCEEDED(SHParseDisplayName(strDirPath, NULL, &pidl, SFGAO_FOLDER, &sfGao)))
    {
        SHGetFileInfo((LPCWSTR)(PCHAR(pidl)), 0, &FileInfo, sizeof(FileInfo), SHGFI_PIDL | SHGFI_ICON);
        CDC* pDC = GetWindowDC();
        pDC->DrawIcon(10, 10, FileInfo.hIcon);
        ReleaseDC(pDC);
    }
    malloc->Free(pidl);
}
malloc->Release();

Вот проблема: я обнаружил, что при таком подходе я могу легко получить значок папки. Но я не мог получить его значок открытия, когда я установил четвертый параметр SHGetFileInfo метод быть SHGFI_PIDL | SHGFI_OPENICON, hIcon из FileInfo всегда NULLи я не знаю почему.

Может кто-нибудь сказать мне, как решить проблему?

1 ответ

Из комментариев:

Я решил проблему. Изменить четвертый параметр из SHGFI_PIDL | SHGFI_OPENICON в SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON, тогда я смог получить значок открытой указанной папки.

Другие вопросы по тегам