c# - 什么图标应该设置为表单的图标?

标签 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。图标

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

同样,问题是:我应该使用什么设置来使 exe 的图标成为表单的图标,并在任何任务栏设置中正常工作?

最佳答案

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

这里的代码可以让您从 Code Project 中做您想做的事情,这些代码正是为您的目的而编写的:将 EXE 文件中的多尺寸图标分配给您的表单。

Assigning an applications icon to all the forms in the application

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

this.icon = Cliver.IconRoutines.HostIcon;

关于c# - 什么图标应该设置为表单的图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194094/

相关文章:

c++ - 如何构建捕获所有异常的 C++ Dll 包装器?

c++ - 如何将 QKeyEvent::nativeModifiers() 转换为 UINT fsModifiers(用于 winapi RegisterHotKey)

c# - Unity TypeLoadException 中的 IKVMC dll

c# - Unity XCode iOS 在启动时崩溃

c# - PictureBox 网格并在单击时选择单个单元格

c# - Winforms 将 ComboBox SelectedItem 绑定(bind)到对象属性

c# - 异步方法的事件订阅

c# - TPL 异步等待 - 异步任务是否必须链接调用堆栈?

c# - 如何在 WebBrowser 控件中启用 inPrivate 模式

c++ - 键盘 Hook 问题