我的应用程序是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系统上,这不适用于DPI扩展等于或高于150%。如果设置为100%SystemInformation.SmallIconSize
报告16x16大小(正确),当它为125%时报告20x20大小(正确),高于该大小(例如150%),它应报告24x24大小但报告16x16并从我的图标文件加载错误的分辨率。
阅读以下文章(http://blog.quppa.net/2011/01/07/small-icon-size-dpi-in-windows/),它告诉我......
WPF和WinForms都围绕着Win32 GetSystemMetrics函数 取参数SM_CXSMICON(小图标宽度)和SM_CYSMICON (小图标高度)。
这意味着我可能不需要自己拨打GetSystemMetrics
,对吧?
关于如何解决这个问题的任何想法?
P.S:我说的是我正在开发的一个开源应用程序,所以如果你想仔细查看完整的源代码,你可以这样做here。
答案 0 :(得分:1)
强烈暗示你的清单实际上并没有完成它的工作
不是。从您的github SlackUI / SlackUI.csproj文件:
<ItemGroup>
<None Include="app.manifest">
<SubType>Designer</SubType>
</None>
</ItemGroup>
应该的样子是:
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
请注意高度特定的<ApplicationManifest>
元素,让MSBuild知道这应该是可执行文件的清单。我通过将其粘贴到.csproj文件,构建然后使用File + Open + File测试您的版本,从bin / Debug目录中选择.exe文件。打开RT_MANIFEST节点并双击资源#1。它只是编译器自动生成的默认值,而不是app.manifest文件中的修改版本。
这就是为什么它不起作用。我没有奇妙的理论如何发生这种情况,也许你是手工添加它。您可以通过右键单击解决方案资源管理器窗口中的app.manifest并将其删除来修复它。现在使用Project&gt;添加新项&gt;一般&gt;应用程序清单文件。再次粘贴更改。