我们有一个传统的.net Windows窗体应用程序。 我们已经用Web应用程序替换了大部分内容,但仍然使用Windows窗体应用程序进行管理任务。
当这个应用程序在4k显示器上使用时,它看起来非常糟糕,这是可以理解的。
但外观会根据系统上的其他显示器而变化。 测试是在lenovo 430上完成的,它有一个4k显示器通过显示端口连接。 笔记本电脑显示器的分辨率为1920/1080,而4k显示器的分辨率为3840/2160。显示比例始终为200%。
所有以下屏幕截图均在4k显示器上拍摄。
我知道如果没有更改并设置dpiAware / dpiAwareness,我们的应用程序在4k上看起来不会很好。
但我的问题是: 为什么应用程序只会根据哪些监视器处于活动状态而发生变化?有没有办法控制哪种“外观”?
答案 0 :(得分:4)
Microsoft了解此问题并使用.Net 4.7 Framework修复此问题:
https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/
答案 1 :(得分:4)
也许你已经意识到这一点,但之前没有提到过:
有三种应用程序:
详细信息: https://msdn.microsoft.com/de-de/library/windows/desktop/dn469266(v=vs.85).aspx
您可以在app.config中设置应用程序的DPI感知:
void SetValue(IntPtr mhWnd, int val)
{
IntPtr hWnd = mhWnd;
int pos = SendMessage4(hWnd, TBM_GETPOS, 0, 0);
Console.WriteLine("pos " + pos);
int result = SendMessage4(hWnd, TBM_SETPOS, 1, val);
Console.WriteLine("result " + result);
//result = SendMessage4(hWnd, WM_HSCROLL, 0, 0);
//Console.WriteLine("result 2 "+ result);
}
和app.manifest:
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</appSettings>
当您有DPI&gt; = 150%时,可以通过额外控制缩放 人民币申请 - &gt;属性 - &gt;兼容性 - &gt;在高DPI上扩展
对于Windows窗体,默认情况下DPI-Scaling禁用高DPI。所以一切都应该开箱即用。也许其中一个设置不是默认设置?特别是exe上的RMB属性配置?
答案 2 :(得分:0)
在我的特殊情况下,我遇到缩放问题的应用程序正在同时使用WinForms和WPF的DevExpress组件。我在DevExpress网站上使用instruction解决了4K显示器的缩放问题。在我看来,该指令是通用的,而不是特定于DevExpress的内容。
即,我刚刚添加了 app.manifest 文件,并将其默认内容替换为以下文件:
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
您可以通过右键单击项目并选择添加新项来添加 app.manifeset 文件:
希望对您也有帮助。