我刚接触过WPF (以及新闻部感知DPI ),并且正在编写一个在Windows 7、8.1和10中运行的应用程序。我使用多个监视器,每个监视器具有不同的DPI设置,并且对使我的应用程序在桌面配置中尽可能兼容感兴趣。
我已经知道,可以将Manifest添加到WPF应用程序中,取消新闻部意识部分的注释,并将其设置为True/PM。这成功地允许程序在Windows8.1和10 (因此在各种监视器上看起来干净和清晰)中感知到每个监视器,但在Windows 7中作为系统感知运行。
但我们能做得更好吗?微软提供了一个这里的“整洁教程”展示了如何创建一个支持DPI的每个监视器。 WPF应用程序。他们实际上是在C++中创建一个新的对象,以取代使用Windows8.1API的<Window>,该对象不仅可以检测监视器之间的DPI变化,还可以在运行时重新调整应用程序的大小,从而有效地匹配DPI中的更改。最终的结果是,这款应用不仅能感知到每个新闻部的应用程序,而且在不同大小的显示器之间切换时,该应用程序会让用户改变屏幕上相同的物理尺寸(以英寸或厘米为单位)。
微软的Win32代码的缺点是它与Windows 7不向后兼容。尝试在7中运行会导致应用程序崩溃。
我已经通过了本文是关于Dr.Dobbs的和这是肯尼·卡尔写的,但是对API的理解还不够好,无法让事情正常进行。
有没有人知道一种类似于微软代码的方法,在Windows8.1和更新版本中,每个监视器感知的应用程序实际上会在显示器之间移动时改变大小,但在Windows 7中作为系统感知运行呢?
发布于 2015-12-28 07:30:59
我还没有看过代码,但我的猜测是,造成崩溃的原因是win 7中缺少本机方法。
public int GetDPIOfMonitor(IntPtr monitorHandle)
{
if (Enviroment.OSVersion >= "6.2") // win 8 and above
{
return NativeMethods.PInvoke.GetMonitorDPI(monitorHandle);
}
else return systemDPI;
}这样您就不会在7以下崩溃,因为您没有调用丢失的本机方法。
https://stackoverflow.com/questions/32095775
复制相似问题