【问题标题】:How to get a folder's open icon with SHGetFileInfo() method?如何使用 SHGetFileInfo() 方法获取文件夹的打开图标?
【发布时间】:2010-11-08 14:41:34
【问题描述】:

这就是我所做的:

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 时,我无法获得它的打开图标。 FileInfohIcon 总是 NULL,我不知道为什么。

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

【问题讨论】:

  • 我已经解决了这个问题。从 SHGFI_PIDL | 修改第四个参数SHGFI_OPENICON 到 SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON,然后我就可以检索到指定文件夹的打开图标了。
  • 也许您应该将此添加为您自己问题的答案。

标签: c++ winapi shell-icons


【解决方案1】:

来自cmets:

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

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多