如何创build一个缩放和尺寸变化的Per-Monitor DPI感知应用程序,与Windows 7向后兼容?

如何创build一个缩放和尺寸变化的Per-Monitor DPI感知应用程序,与Windows 7向后兼容?,第1张

概述如何创build一个缩放和尺寸变化的Per-Monitor DPI感知应用程序,与Windows 7向后兼容?

我是WPF(和DPI意识API)的新手,正在编写一个在windows 7,8.1和10中运行的应用程序。我使用多个监视器,每个监视器的DPI设置不同,并且有兴趣将我的应用程序设置为尽可能跨桌面configuration兼容。

我已经知道可以将一个Manifest添加到WPF应用程序中,取消注释DPI感知部分,并将其设置为True/PM 。 这成功地允许该程序在windows 8.1和windows 10(每个显示器上看起来清晰而清晰)中的每个显示器支持DPI,但在windows 7中以系统感知的方式运行。

但是我们可以做得更好吗? 微软在这里提供了一个简洁的教程,展示了如何创build一个每个监视器的DPI-Aware WPF应用程序。 他们所做的实际上是在C ++中创build一个新的对象来replace使用windows 8.1 API的<Window> ,以便不仅检测监视器之间的DPI更改,还可以在运行时重新调整应用程序的大小 ,从而有效地匹配DPI中的更改。 最终的结果是,不仅应用程序Per-DPI了解清晰,而且在各种尺寸的大型和小型显示器之间切换时,应用程序还会寻找用户在屏幕上更改相同的物理尺寸(以英寸或厘米为单位) 。

微软的Win32代码的缺点是它不能与windows 7向后兼容。试图在7中运行导致应用程序崩溃。

有没有办法用White激活一个窗口?

如何确定文件是否在FAT系统上(查看它是否真的可执行)

valgrind显示的额外程序内存消耗

linux的初学者,在哪里把增强图书馆?

CScrollVIEw只能滚动大部分区域

我已经阅读了Dr.dobbs上的这篇文章 ,Kenny Karr也阅读了这篇文章,但是不明白这些API是否足以让事情发挥作用。

有谁知道有一种方法可以做类似于微软的代码,在windows 8.1和更新的版本中,每个监视器感知的应用程序在显示器之间移动时实际上会改变大小 ,但是在windows 7中以系统感知的方式运行?

memps输出中的或是什么意思

从C#打开C: windows assembly gac_msil

“顶级”程序用于在屏幕上重新显示数据的技术是什么?

Win32 PE中的某个部分是否包含可执行代码,初始化数据和单元化数据的组合?

双重下划线的含义在一开始

我没有看过代码,但我的猜测是崩溃是由于在win 7中缺少本地方法而导致的。解决这个问题的方法是修改本地方法wrapper,例如(伪代码):

public int GetDPIOfMonitor(IntPtr monitorHandle) { if (Enviroment.Osversion >= "6.2") // win 8 and above { return NativeMethods.PInvoke.GetMonitorDPI(monitorHandle); } else return systemDPI; }

这样你就不会在7以下崩溃,因为你没有调用缺少的本地方法。

总结

以上是内存溢出为你收集整理的如何创build一个缩放和尺寸变化的Per-Monitor DPI感知应用程序,与Windows 7向后兼容?全部内容,希望文章能够帮你解决如何创build一个缩放和尺寸变化的Per-Monitor DPI感知应用程序,与Windows 7向后兼容?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1221492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存