首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHGetImageList在Windows 7上返回损坏的文件夹图标

SHGetImageList在Windows 7上返回损坏的文件夹图标
EN

Stack Overflow用户
提问于 2015-01-26 13:09:28
回答 1查看 258关注 0票数 1

在Windows 7上,文件夹的默认图标出现了问题。

我习惯于用下一个代码来获取图标

代码语言:javascript
复制
    DWORD flags = directory ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
    ...
        HICON largeIcon = NULL;

        SHGetFileInfo(filename.c_str(), flags, &shfi, sizeof(SHFILEINFO),
            SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);

        IImageList* imageList = NULL;
        HRESULT hResult = SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&imageList);
        if (!imageList || hResult != S_OK)
            return NULL;

        hResult = imageList->GetIcon(shfi.iIcon, ILD_TRANSPARENT, &largeIcon);
        if (hResult != S_OK)
            return NULL;

        icon = LoadBitmapFromHicon(largeIcon);
        DestroyIcon(shfi.hIcon);
        DestroyIcon(largeIcon);

但是它返回文件夹的损坏图标。再来一个就行了。我已经在上面涂上了灰色过滤器。原来的一样。

http://i.stack.imgur.com/IM7pm.png

PS。我在W8上看起来很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-26 13:52:02

也有同样的问题。但我用的是解决办法:

代码语言:javascript
复制
function ExtractFolderIcon: HICON;
var
  Info: TSHStockIconInfo;
  Lib: HMODULE;
begin
  Info.cbSize := SizeOf(Info);
  OleCheck(SHGetStockIconInfo(SIID_FOLDER, SHGSI_ICONLOCATION, Info));
  Lib := LoadLibrary(Info.szPath);
  if Lib = 0 then RaiseLastOSError;
  try
    Result := LoadImage(Lib, MAKEINTRESOURCE(-Info.iIcon), IMAGE_ICON, 256, 256, LR_DEFAULTCOLOR);
  finally
    FreeLibrary(Lib);
  end;
end;

左边的图像是用你的“经典”方式接收到的,右边是你的解决方案:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28150706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档