我是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向后兼容?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)