直接在资源中使用图标的问题在于,框架没有在图标文件中选择正确的图标版本,而是将默认图标版本简单地缩放到通知区域所需的任何大小。这就是为什么您会看到锯齿状边缘。
为了获得最佳质量,您需要自己在图标中选择合适的尺寸。
首先,不要直接NotifyIcon.Icon
在资源中设置你的图标,而是创建一个新Icon
实例。这样做将允许您在图标资源中选择特定的图标大小。使用SystemInformation.SmallIconSize
将为您提供通知区域所需的大小。
所以 :
myNotifyIcon.Icon = new Icon(Properties.Resources.MyIcon, SystemInformation.SmallIconSize);
现在,SystemInformation.SmallIconSize
始终返回正确的图标大小,但前提是您的应用程序可识别 DPI(否则,它始终返回 16)。如果您的应用程序不支持 DPI,并且在启用了 DPI 缩放的系统上使用,则上面的行将选择资源中的 16x16 图标,它将被缩放到通知区域需要的任何大小(换句话说,丑陋的图标)。
通过使您的应用程序具有 DPI 感知能力,SystemInformation.SmallIconSize
将返回正确的大小,同时考虑 DPI 缩放。例如,如果 DPI 缩放为 150%,SystemInformation.SmallIconSize
将返回 24 (16 × 1.5)。
要让您的应用具有 DPI 感知能力,只需将其添加到您的 app.manifest 中的<asmv1:assembly>
标签内:
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>