【问题标题】:What icon should be set as form's icon?应该将什么图标设置为表单的图标?
【发布时间】:2018-01-10 18:41:29
【问题描述】:

我有一个 WinForms 应用程序。我在项目设置中设置了可执行文件的图标(至少有 16x16 和 32x32 格式),它成功地显示在资源管理器和其他地方的 .exe 文件中。

如何将此图标设置为表单的图标(Form.Icon 属性或其他东西)?可以用在表单左侧的表头中,也可以用来在任务栏中显示表单。

据我所知,System.Drawing.Icon 不能使用多种图标格式创建,但是.. 当用户的任务栏启用了“小图标”时,任务栏的图标应该是 16x16。禁用此选项时,应为 32x32。如果图标大小错误,窗口会缩放它,看起来很糟糕。

Icon.ExtractAssociatedIcon 只给了我一种格式 (32x32)。 P/Invoking ExtractIconEx 给了我两种格式(16x16 和 32x32),但我无法将它组合到一个 System.Drawing.Icon 实例中以设置为 Form.Icon

当然,我可以从 .ico 文件中设置带有表单属性的图标,但它会给我资源重复:一个图标作为可执行文件的图标存储在 PE 中,另一个作为 .NET 资源存储。

再次,问题是:我应该使用什么设置来使 exe 的图标成为表单的图标并与任何任务栏设置一样工作?

【问题讨论】:

  • 使用 IcoFX 之类的程序只是为了确保您将图标的所有位数和尺寸都保存到一个文件中。然后,一旦将图标设置为表单图标,它就会对任务栏图标使用相同的图标并相应地调整大小而不做任何事情。
  • 我确信我的 .ico 是正确的。我应该如何设置这个图标而不在 .NET 资源中复制它?
  • 在项目资源中转到图标选项卡并在那里添加您的图标。然后在表单中只需单击图标属性并从资源列表中选择您的图标即可。
  • @Franck 正如我在问题帖子中所说,这将导致资源重复。这是不希望的
  • 您的可执行文件图标应采用多种格式(16x16、32x32、64x64 和 256x256)。对所有内容都使用该多尺寸图标。有在线服务可以将 PNG、JPG 等位图转换为多格式图标。搜索“图标转换器”或类似内容。

标签: c# winforms winapi icons


【解决方案1】:

Windows 和 .Net 中的默认图标处理例程似乎不能很好地从模块中提取多尺寸图标。 Icon 类有一个棘手的用法,它从一个图标文件中提取所有数据,然后只使用一种大小,您可以从原来的 Icon 对象创建一个新的 Icon 对象以获得不同的大小,它将共享数据并提取最接近的大小。不幸的是,并没有真正包含轻松处理多尺寸图标的方法。

这里的代码可以让你从代码项目中做你想做的事情,完全按照你的目的编写:将多尺寸图标从 EXE 文件分配给你的表单。

Assigning an applications icon to all the forms in the application

将库添加到项目后,您可以将单例属性 HostIcon 分配给表单的 icon 属性:

this.icon = Cliver.IconRoutines.HostIcon;

【讨论】:

  • Icon.GetAssociatedIcon 只提取 32x32 格式,但我都需要。
  • 我猜你的意思是Icon.ExtractAssociatedIcon
  • 糟糕。是的。它是。我不得不复制粘贴而不是写作:)
猜你喜欢
  • 2013-01-04
  • 2019-10-23
  • 2015-09-28
  • 2015-08-08
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多