9

我有一个 .ico 文件,其中嵌入了 5 个图标大小,用作主应用程序图标和系统托盘图标。

当它出现在任务栏中时,该图标使用的是所需的 16x16 格式。当图标出现在通知区域/系统托盘中时,它使用 32x32 格式,而 Windows 将其渲染为 16x16 图标,这看起来很糟糕。

如何强制 Windows 在通知区域中使用 16x16 图标大小?这是我将图标放入系统托盘的代码:

ContextMenu cmNotify = new ContextMenu();
MenuItem miNotify = new MenuItem(Properties.Resources.Notify_Text);
miNotify.DefaultItem = true;
miNotify.Click += new EventHandler(notifyHandler);
cmNotify.MenuItems.Add(miNotify);


notifyIcon = new NotifyIcon();
notifyIcon.Icon = this.Icon;
notifyIcon.Visible = true;
notifyIcon.ContextMenu = cmNotify;
notifyIcon.Text = AppConstants.APPLICATION_NAME;
4

3 回答 3

15

两种反应都很接近,但含有一种微妙的毒药。您不应将请求的大小硬编码为 16x16。

相反,查询 SystemInformation.SmallIconSize 以确定适当的维度。虽然默认值肯定是 16x16,但这可以通过各种方式进行更改,例如 DPI 缩放。

有关此属性的详细信息,请参阅MSDN 文章

一个使用示例是

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, SystemInformation.SmallIconSize),
于 2009-11-03T23:15:44.517 回答
7

改变这个:

notifyIcon.Icon = this.Icon;

对此:

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16);
于 2009-03-05T21:19:20.217 回答
1

您需要创建图标的新实例。创建(加载)新实例时,指定大小。Icon 类构造函数有几个不同的重载供您选择。如果图标文件嵌入到您的主可执行文件中(通常是这种情况),您可以这样做:

Assembly asm = this.GetType().Assembly;

var smallIconSize = new System.Drawing.Size(16, 16);
notifyIcon.Icon = new System.Drawing.Icon(
    asm.GetManifestResourceStream("MyPrettyAppIcon.ico"), smallIconSize);
于 2009-03-05T21:03:45.013 回答