【问题标题】:What is the appropriate way to access common ("stock") icons in Windows?访问 Windows 中常见(“库存”)图标的适当方法是什么?
【发布时间】:2020-09-11 13:19:29
【问题描述】:

大多数操作系统倾向于使用一组通用的“库存”图标来指示“警告”、“错误”和其他状态。我们大多数人都知道我们不应该 grovel into undocumented resources 并在我们的应用程序中使用它们。

但是,在 GTK 中,可以检索这些图标,因为该工具包提供了记录的 API 来执行此操作。在 Windows 中,虽然可能从适当的 DLL 中提取一组有限的图标,但这是未记录的,并且不保证在未来的 Windows 版本中工作。 API 提供的图标是合约;存储在 DLL 中的图标是一个实现细节。

是否有任何 Windows(或 .NET 4)API 函数来检索“股票图标”?我知道对于文件关联,可以通过注册表找到 DefaultIcon 条目,但是这个不会考虑自定义图标处理程序,并且它不是其他库存图标的解决方案,例如警告或错误消息框中使用的图标。

如果没有这样的功能,在我的应用程序中使用这些图标最适合未来的方式是什么?还是我只需要自己完成所有工作并担心 Microsoft 在未来版本的 Windows 中更改实现细节?

【问题讨论】:

  • @SimonMourier 仅适用于 Shell 图标,我认为这里不会涉及这些图标。
  • 哦……哇。我不知道这个功能甚至存在。 +1!我可能在这里吹毛求疵,我更喜欢可以追溯到 Windows XP 的解决方案……但我可以接受。这正是我想要的。
  • @MarkRansom - 好吧,这是 Windows Shell 官方库存图标。它有警告、错误等。没有外壳的图标会是什么?
  • @slickdeveloper 这个SO question,几个月前我问过,相关的答案也可能很有趣。

标签: windows winapi icons


【解决方案1】:

您可以使用LoadIconLoadImage 加载股票图标。 Microsoft 推荐LoadImage,但没有记录您可以加载的图标,仅将您指向包含该列表的 .h 文件。

【讨论】:

  • 我喜欢这个,与 Windows Vista 提供的新解决方案相比,它似乎可以一直移植到 Win2k。我认为最初我并没有想到它,因为我假设您必须传入由 LoadLibrary 加载的库,但我现在看到文档声明您也可以使用“预定义图标”,这似乎适用于我我在问。
  • 这个SO question,几个月前我问过,相关的答案也可能很有趣。
  • @Jabberwocky 哦。看。这正是我不总是信任 API 的原因。如果 Windows 认为您的应用程序无法处理某些事情,他们往往会“伪造”一些事情。虽然我不确定这就是这里发生的事情。非常奇怪......似乎他们发布了两个完全不同的图标(现代的一个和 Vista 时代的一个),尽管他们为什么要这样做是相当莫名其妙的。除非它与图标大小和指标以及其他兼容性废话有关,否则我不完全理解......
  • @slickdeveloper 我也不明白。我已经用我公司维护的所有应用程序中的新图标替换了旧的 WIndows 7 图标,并且没有任何问题,即使新的“注意”图标略高于旧图标。如果您想使用这种方法并且想在 Windows XP 上运行您的软件,您需要回退到 LoadIcon。
猜你喜欢
  • 1970-01-01
  • 2015-12-19
  • 2012-07-27
  • 2022-01-17
  • 2011-10-25
  • 2011-06-05
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多