【发布时间】:2017-08-31 01:13:54
【问题描述】:
如何检索给定 DPI 的系统图像列表?
当应用程序可识别系统 DPI 时,SHGetFileInfo 和类似函数将句柄返回到正确缩放的系统图像列表。 C++ 示例:
handle =
SHGetFileInfo(L"", 0, &fileInfo, sizeof(fileInfo),
SHGFI_SYSICONINDEX | (large ? SHGFI_LARGEICON : SHGFI_SMALLICON));
但是对于每个显示器的 DPI 感知,这还不够,因为应用程序可以在不使用系统 DPI 的显示器上运行(或者应用程序可以有多个窗口,每个窗口在不同的显示器上,具有不同的 DPI)。
例如,在 168 DPI(175% 缩放)显示器上,使用标准 96 系统 DPI,您会看到未缩放的 16x16 小图标:
所以我希望 SHGetFileInfo(或类似)有一个 DPI 感知变体,就像其他函数的 DPI 感知变体一样:
【问题讨论】:
-
啊,我有代码指示
SHGetImageList返回巨型 256x256 图标,如果这是您需要的。再看一遍我怀疑我最初是从here -
@MickyD 因为那不是“正确”的解决方案。图标设计师将在巨型图标和小图标中添加更多细节,例如16px 他们省略了这个细节并创建了定制的变体。
-
HIMAGELIST hImageList = reinterpret_cast<HIMAGELIST>(IImageList);fwiw. -
只有 4 种尺寸,您只需根据 DPI 和适当的比例选择最接近的一种。