我的应用程序是 DPI-Aware,这是完整的清单:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity name="SlackUI"
type="win32"
version="1.0.0.0" />
<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>
</asmv1:assembly>
我正在NotifyIcon
像这样设置我的图标属性:
notifyIcon.Icon = new Icon(Program.Settings.Data.WhiteNotificationIcon ?
Properties.Resources.NotifyWhite : Properties.Resources.NotifyColor, SystemInformation.SmallIconSize)
但是,这不适用于我的 Windows 8.1 系统上等于或高于 150% 的 DPI 缩放。当设置为 100% 时SystemInformation.SmallIconSize
报告 16x16 尺寸(正确),当设置为 125% 时报告 20x20 尺寸(正确),高于此值,例如 150%,它应该报告 24x24 尺寸,但报告 16x16 并加载错误的分辨率从我的图标文件。
阅读以下文章(http://blog.quppa.net/2011/01/07/small-icon-size-dpi-in-windows/)它告诉我......
WPF 和 WinForms 都使用参数 SM_CXSMICON(小图标宽度)和 SM_CYSMICON(小图标高度)的 Win32 GetSystemMetrics 函数。
这意味着可能没有必要给GetSystemMetrics
自己打电话,对吧?
关于如何解决这个问题的任何想法?
PS:我说的是我正在开发的一个开源应用程序,所以如果你想仔细查看完整的源代码,你可以在这里进行。