我的应用程序是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
icon属性,如下所示:
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大小(正确),当设置为100%时报告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:我说的是我正在开发的开源应用程序,因此,如果您想仔细查看完整的源代码,可以在这里进行。
强烈暗示您的清单实际上并没有完成任务
它不是。从您的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并将其删除来修复它。现在使用“项目”>“添加新项”>“常规”>“应用程序清单文件”。再次粘贴更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句