2016-03-31 21 views
0

我正在使用C#和.Net 4.5开发软件。我在一台老式机器上开始了项目,其DPI缩放为100%。在我的新机器上,由于高分辨率显示,我必须设置200%的缩放比例。我是否必须在我的源代码中处理HiDPI功能,还是由.Net和.Net提供。视窗?

在Visual Studio Designer中,软件的Gui完美呈现: Gui within the Designer

已编译软件的Gui呈现不良:Gui in compiled software

我的期望是,因为我只使用.Net Gui Elements/Controls而没有自己设计的gui元素,windows应该可以处理缩放而不会有任何问题。但是,正如我所看到的,窗户不是。

是否必须在Visual Studio项目设置中启用HiDPI选项,还是必须在代码中处理HiDPI?

回答

4

默认情况下,大多数Windows窗体应用程序不支持DPI。实际上,大多数Windows应用程序都不是DPI。所以,你需要选择加入DPI意识在您的应用程序清单:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" 
      xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
<asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
    <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
</asmv3:application> 
</assembly> 

由于DPI意识是每个进程中,VS设计师对这个问题上没有选择 - 它的Visual Studio,这是内运行DPI知道。

尽管如此,确保所有的一切都适用于低DPI和高DPI。 DPI意味着“我将正确处理所有DPI缩放,无需为我伪造;谢谢。”希望你已经通过适当的自动缩放和布局设计你的表单,或者使用独立于设备的单元而不是像素:)

当你的应用程序没有声明被DPI识别时,Windows假定你是一个遗留应用程序,不能正确处理DPI。所以为了防止出现问题,假装您实际上正在渲染一个较小的显示器 - 在您的情况下,尺寸只有一半,然后将产生的曲面恢复到适当的尺寸。这导致了模糊,尤其是对于文本,但确保了所有内容都具有适当的尺寸和比例 - 例如,你不会得到比它们中的文本更小的按钮,或者重叠的控件。

如果使用正确的布局方法,Windows窗体和WPF都可以正确处理DPI,因此.NET绝对支持DPI。但是它们都能够很好地识别DPI,大多数应用程序仍然忽略DPI问题,所以默认情况与其他Windows应用程序相同。由于没有“传统WPF”应用程序,并且执行WPF的最简单方式也是DPI,因此WPF的默认项目模板已经包含声明DPI认知的清单,所以我假设您在Windows窗体中创建了项目:)实际上,鉴于Windows现在如何演变,您可能希望拥有程序集清单,以正确管理所有兼容性功能:)

要获得额外的奖励,当有多个显示器具有不同的DPI时,会出现更多问题 - 要声明正确支持,你会使用<dpiAware>true/PM</dpiAware>。这只适用于Windows 8.1+,并且正确实施可能非常棘手。

相关问题