【问题标题】:Setting a different taskbar icon to the icon displayed in the titlebar (C#)?将不同的任务栏图标设置为标题栏中显示的图标(C#)?
【发布时间】:2011-05-02 05:24:09
【问题描述】:

我的应用程序图标有深色和浅色版本;深色版本在 Windows XP 任务栏等灰色表面上效果最佳,而浅色版本在标题栏中作为图标效果最佳。

有没有办法可以将任务栏中的图标设置为与 C# 表单中使用的图标不同的图标(P/Invoke 很好)?

【问题讨论】:

  • 它们是独立的项目还是一个项目,您想以编程方式设置它?
  • 这是同一个项目(相同的形式),我想以编程方式设置它。
  • 我在 .Net 4.0 中读到了一些关于“Window.TaskbarItemInfo”的内容。可以通过覆盖属性来做到这一点。
  • 我会得到一个更好的图标,它在明暗上都看起来不错。仅仅是因为您无法保证用户的颜色偏好。你怎么知道用户正在使用股票 xp 主题?
  • 你是怎么解决这个问题的?

标签: c# winforms icons


【解决方案1】:

我知道这是一个老问题,但我在尝试实现相同目标时遇到了这个问题,而且是的,你可以做到这一点,至少在 Windows 7/8 上。

事实证明,ICO 文件不仅包含一张图像,它还包含 9 种不同分辨率的 9 张不同图像:

  • 16x16
  • 24x24
  • 32x32
  • 48x48
  • 64x64
  • 72x72
  • 80x80
  • 96x96
  • 128x128

在 Windows 7 和 8 上,64x64 图像用于任务栏,16x16 图像用于位于表单左上角的图标。

您可以使用Greenfish Icon Editor Pro 之类的工具(我不为他们工作或其他任何东西,这不是插件!)将它们作为两个单独的图像,然后将这个*.ico 文件正常添加到Visual Studio 中的 Windows 窗体/WPF 窗体。

最终结果如下图:

如您所见,我的 WPF 应用程序有两个单独的图标,一个在任务栏中,另一个在表单上。

【讨论】:

  • 嗯,一个 .ico 文件中可以有任意数量的图标。此外,此解决方案可能有效,但实际上并不实用。另外:Windows 不一定使用 64x64 图标来显示任务栏图标。在具有默认 dpi 设置的典型系统上,可以使用 32x32 图标。对于更高的 dpi 比例,Windows 将为标题栏和任务栏使用不同的图标大小。
  • 另外,如果您在将图标设置为表单图标之前修改了图标(例如将 32x32 图标大小调整为 16x16,质量比默认尺寸器更好),那么您实际上可能会丢失所有其他尺寸包含在您的原始图标文件中。 @AndreasAdler 的答案绝对是所提问题的最佳答案。
  • 此外,如果您选中“任务栏 -> 使用小任务栏按钮”设置,窗口也会使用 16x16 图标。
【解决方案2】:

使用 ICON_SMALL 和 ICON_BIG 参数的不同图标句柄将 WM_SETICON 消息发送到您的表单:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);

private const uint WM_SETICON = 0x80u;
private const int ICON_SMALL = 0;
private const int ICON_BIG = 1;

public MyForm()
{
    InitializeComponent();

    SendMessage(this.Handle, WM_SETICON, ICON_SMALL, Properties.Resources.IconSmall.Handle);
    SendMessage(this.Handle, WM_SETICON, ICON_BIG, Properties.Resources.IconBig.Handle);
}

【讨论】:

  • 很好的答案!肯定 +1!
  • 你能给我更多的信息吗?我不知道如何应用此解决方案
猜你喜欢
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
相关资源
最近更新 更多