winforms - NotifyIcon 使用哪种格式和大小的图标

标签 winforms windows-7 windows-vista notifyicon

我找不到有关系统托盘图标的任何信息,以及它们应该采用什么尺寸才能获得最佳质量。我应该使用不止一种尺寸(16x16、32x32、64x64)吗?

我目前使用 16x16 .ICO 图标,它们看起来很困惑。

最佳答案

它们是小图标 (ICON_SMALL)。您可以通过调用以下命令了解尺寸:

GetSystemMetrics(SM_CXSMICON)

我认为假设它们是正方形是相当安全的,但如果您偏执,那么您可以随时查询SM_CYSMICON

在我的 Windows 7 机器上,它们的大小为 16px。但如果您使用字体缩放,那么它们会更大。对于 125% 的字体缩放(例如大字体),您将需要一个 20 像素的图标。

如果您手头没有 20px 版本,那么最好的方法是即时生成一个版本,并将您的 16px 版本放在新的 20px 图标的中间。

更新

NOTIFYICONDATA 的文档建议使用 LoadIconMetric 传递 LIM_SMALL,这相当于我上面概述的方法。

但是,NOTIFYICONDATA 主题还表示要使用仅包含 16px 和 32px 版本图标的图标资源。这个建议是虚假的,因为任何人都可以亲眼看到,大字体下的通知图标是 20px 图标,而 LoadIconMetric 的比例从 32 到 20。我建议提供 16、20、24、32px 版本.

在 XP 上,LoadIconMetric 不存在,因此您需要实现后备例程。

关于winforms - NotifyIcon 使用哪种格式和大小的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306509/

相关文章:

winforms - 如何正确重置增量计数器?

java - 在 Windows7 机器上 java.util.Date 为 GMT,但 Windows 时钟应用程序显示正确的本地时间

c++ - 从 2020 年开始学习 c++ 需要 c++17 吗?

c++ - Vista 和进程外 COM 服务器

vb.net - 尝试从WinForms App启动Powershell脚本时出错

c# - C#-更改组合框项目的索引?

c# - 拖放自定义对象

visual-c++ - Windows 7 用户权限和安全审查

c# - 如何更改文件权限以阻止 Vista 写入 VirtualStore 目录中的文件?