我是WPF(和DPI-awareness API)的新手,我正在编写一个在Windows 7,8.1和10中运行的应用程序.我使用具有不同的每个监视器DPI设置的多个监视器,并且我有兴趣将我的应用程序设置为在桌面配置中尽可能兼容.
我已经知道可以在WPF应用程序中添加Manifest,取消注释DPI感知部分,并将其设置为True/PM.这成功地允许程序在Windows 8.1和10中具有Per-Monitor DPI感知功能(因此在各种监视器上看起来干净且清晰),但在Windows 7中以系统感知的方式运行.
但我们能更好地迈出一步吗?Microsoft提供了一个简洁的教程,介绍如何创建Per-Monitor DPI-Aware WPF应用程序.他们所做的实际上是用C++创建一个新对象来替换<Window>它使用Windows 8.1 API不仅检测监视器之间的DPI变化,而且在运行时重新调整应用程序的大小,有效地匹配DPI的变化.最终结果是,不仅应用程序Per-DPI具有清晰的外观,而且在各种尺寸的大型和小型显示器之间切换时,应用程序会向用户显示在屏幕上更改相同的物理尺寸(以英寸或厘米为单位) .
微软的Win32代码的缺点是它不向后兼容Windows 7.试图在7中运行会导致应用程序崩溃.
我已经阅读过Dr.Dobbs上的这篇文章和Kenny Karr 撰写的这篇文章,但是不能很好地理解API以使其工作.
有没有人知道一种类似于微软代码的方法,在Windows 8.1及更高版本中,Per-Monitor 识别的应用程序实际上会在监视器之间移动时改变大小,但在Windows 7中作为System-Aware运行?