首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我能得到64x64版本的文件图标吗?

我能得到64x64版本的文件图标吗?
EN

Stack Overflow用户
提问于 2016-11-09 00:02:07
回答 1查看 673关注 0票数 0

我目前正在使用this post中的方法来获取文件的图标,并且它工作了。

唯一的问题是,我只能得到16x16,32x32,48x48和256x256版本的图标集。使用巨型图标不是一个好主意,因为图标在缩放后看起来很糟糕。我认为应该有一种方法来获得某个大小的图标,因为图标文件超过了四个大小。但是怎么做呢?

附言:我不喜欢使用外部库。

EN

回答 1

Stack Overflow用户

发布于 2016-11-09 05:56:04

系统维护四个大小不同的图像列表:小(16x16)、大(32x32)、超大(48x48)和巨型(256x256)。

但请注意,大小只是典型的标准大小。如果系统设置为不同的DPI比例因子,则大小可以更改(例如,在200% DPI系统上,大图像列表将为64x64)。

当系统将图标添加到系统映像列表中时,它会从图标资源中选取最接近的大小,以尽可能避免缩放。这意味着,如果一个程序包含一个64x64像素的图标,它可能会被用于超大图像,它可能被用于大图像,它甚至可能被用于小图像(在400% DPI缩放的系统上)-但不能保证。

从可执行文件中最终提取特定大小的图标的唯一方法是自己加载它。

您可以不使用SHGetFileInfo为您检索图标(或图标索引),而是要求它告诉您图标来自何处(即,包含图标资源和资源索引的可执行文件)。为此,请使用SHGFI_ICONLOCATION标志。这将返回在szDisplayName中包含图标的可执行路径,以及在iIcon中包含图标的索引。

然后,您可以将该信息传递给SHDefExtractIcon函数,使用其nIconSize参数请求特定大小的图标。

Psuedo代码:

代码语言:javascript
代码运行次数:0
运行
复制
// find icon location for .txt file icons
SHFILEINFO sfi{};
SHGetFileInfo(L".txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICONLOCATION);

// extract the 64x64 pixel icon
HICON hIcon;
SHDefExtractIcon(sfi.szDisplayName, sfi.iIcon, 0, nullptr, &hIcon, MAKELONG(0, 64));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40491391

复制
相关文章

相似问题

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