应该将哪个图标设置为表单的图标?

时间:2018-01-10 18:41:29

标签: c# winforms winapi icons

我有一个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的图标设置为表单的图标,并在任何任务栏设置下正常工作?

1 个答案:

答案 0 :(得分:0)

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

以下代码可让您从Code Project中执行您想要的操作,完全按照您的目的编写:将EXE文件中的multisize图标指定给表单。

Assigning an applications icon to all the forms in the application

将库添加到项目后,您只需将单件属性HostIcon分配给表单的icon属性:

this.icon = Cliver.IconRoutines.HostIcon;