Windows从多图标文件中选择错误的图标,并自我渲染到正确的大小

Bri*_*anH 9 .net windows icons rendering

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

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

如何强制窗口在通知区域中使用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;
Run Code Online (Sandbox Code Playgroud)

小智 15

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

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

有关此属性的更多信息,请参阅MSDN文章.

使用的一个例子是

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, SystemInformation.SmallIconSize),
Run Code Online (Sandbox Code Playgroud)


Bri*_*anH 7

改变这个:

notifyIcon.Icon = this.Icon;
Run Code Online (Sandbox Code Playgroud)

对此:

notifyIcon.Icon = new System.Drawing.Icon(this.Icon, 16, 16);
Run Code Online (Sandbox Code Playgroud)