如何使用SHGetFileInfo()方法获取文件夹的打开图标?

时间:2009-07-07 07:01:52

标签: c++ winapi shell-icons

这就是我所做的:

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的{​​{1}}始终为FileInfo,我不知道原因。

有谁能告诉我如何解决问题?

1 个答案:

答案 0 :(得分:0)

来自评论:

我已经解决了这个问题。将第四个参数从SHGFI_PIDL | SHGFI_OPENICON修改为SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON,然后我就可以检索指定文件夹的打开图标。