高DPI的坑

win10下有一个坑爹的“每屏高DPI支持”开关需要开启,对于C#来说需要加一个app.manifest来开启。
https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI

对于C++ 则需要右键属性–清单工具–输入和输出–DPI识别功能,改成“每个监视器高DPI识别”

以上是对于EXE来说的,如果应用是编成DLL给其他应用来调用的话,则需要在application的顶层工程做上述配置。

如果不做这个配置,那么在程序里使用winAPI或者.Net API,都无法获取正确的屏幕坐标。

这个模块之前早就写了的,只是最近一直上班总忘记发,现在已经凌晨四点过了,才下班回来,想起这个模块,发出来大伙瞅瞅。 我们设计好软件界面编译后,如果运行在DPI的屏幕上,可能存在字体模糊的情况。例如我目前使用的笔记本电脑(感谢某大哥赞助)就是这么个情况,以前写好的软件打开一看,字体模模糊糊的。 如图: 从图中可以看到,软件读取屏幕的DPI也没有读取到正确的缩放比例,正确的应该是125%,而不是图中显示的100%。 要解决字体模糊和正确读取屏幕缩放比例(DPI),我选择的方案是在编译后的软件中设置存根清单来实现。 用到的存根清单设置工具, 此软件我之前有开源过,需要源码请自行搜索。 方法:运行这个工具,将需要处理的文件(已编译的EXE可执行文件)拖到这个工具的窗口中,然后勾选DPI感知,最后点击更新即可。 如图: 这样操作以后,软件就能够正确读取到缩放比例,而且界面的字体也变清晰了,随之出现新的问题。 如图: 缩放比例读取正确,字体也清晰了,但是导致的问题是由于字体变大,窗口组件显示不完整了。 这时候就需要用到今天开源的这给个模块 ,附上这个模块的演示源码 。 重点来了,处理程序适应屏幕缩放的解决步骤: 1,在窗口启动事件下,调用该模块的取屏幕缩放比例()命令来获取屏幕缩放比例,判断是否需要缩放窗口组件,如果需要则继续调用适配屏幕缩放()命令,这条命令会根据指定的缩放比例改变指定窗口及其所有窗口组件的尺寸,如果有多个窗口,则每个窗口都需要这样处理。 2,编译您的程序,然后使用存根清单设置工具启用DPI感知选项。 注意:第一个操作是在源码中调用模块并写入适配的代码,第二个操作是对编译后的EXE可执行文件的存根清单进行设置。 完成这两个操作,你的软件就能很好的适配了。 如图: 这只是一个比较笨拙的解决方案,仅供参考! 注意:代码中使用此模块后,还需配合存根清单设置工具使用,如果没有启用DPI感知,则达不到预期的效果!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值