Windows应用程序 – DPI问题
我们现有的基于Win32 MFC的应用程序存在问题.它在使用高dpi设置的显示器上无法正确呈现.更具体地说,在选择了120 dpi的
Windows XP中,应用程序中有几个地方可以放大文本但不是它们的容器(文本溢出它的按钮边界等).当选择> 96 dpi并选择“使用XP风格dpi缩放”时,Windows 7(和Vista)中也会出现这种情况.如果没有选择xp样式缩放,那么我理解Win7使用DPI虚拟化.使用DPI虚拟化时,一切看起来都很好(好的东西很模糊,但至少它们是正确的).默认情况下,Win7 120 dpi使用xp样式缩放,而下一个设置(144 dpi)则不然.所以我们的应用程序在144 dpi时看起来是正确的,但在120 dpi时错误.
如果我编辑应用程序清单以将应用程序声明为“DPI感知”,那么这将改变DPI虚拟化(但不是XP风格的dpi缩放),这让我无处可去.事情看起来仍然很糟糕(120 dpi没有变化,144 dpi现在已经破了). 我需要解决这个问题,我已经尝试过阅读DPI /扩展问题,这是一次学习经历.到目前为止,我还没有找到合适的解决方案.目前,我目前无意进行彻底和正确的修复(应用程序根据dpi正确地缩放所有元素).这将涉及很多重写.我认为有两种可能的解决方案.一个是关闭任何类型的DPI缩放.这意味着如果用户Win7系统设置为120 dpi,那么他们系统上的所有内容都会看起来很好/很大但我们的应用程序看起来不错,但与其他应用程序中的其他内容相比会很小.第二个解决方案是如何强制我们的应用程序使用DPI虚拟化,但永远不会使用XP风格的dpi缩放.我希望这是一个应用程序端更改,而不是依赖于最终用户必须进行Windows配置更改. 到目前为止,我还没有找到解决问题的方法. 有人可以更熟悉这个主题,请回复并指出我的正确方法吗? 谢谢 解决方法
您无法在120 DPI设置上强制DPI虚拟化.我自己对这个产品进行了调查,因为在高DPI中看起来很模糊,这似乎是一个很好的权衡.
我们最终完全重写了UI定位和缩放,以便在高DPI设置中使用字体缩放来正确缩放.客户端现在可以完全识别DPI并在任何DPI设置中正确扩展. 在我们的案例中,为了一个相当复杂的客户,正确地完成这项工作需要花费3个月的时间. 我们有一个我们从未尝试过的次要计划,但它可能适合您:在启动时读取OS的DPI比例因子.然后通过此因子减少您拥有的所有字体实例,以便在Windows再次缩放字体时,它们将恢复为UI可以适合它们的大小.当然,具有高DPI设置的用户不会在应用程序中获得更大的字体,但它至少可以使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- DNS区域传送漏洞实验以及二级域名爆破
- 单点登录 – 没有Windows登录的富客户端(“胖客户端”)的单
- iscsi – 使用MPIO将Freenas连接到Windows Server 2016
- windows-server-2008 – 登录前最简单的启动应用程序的方法
- batch-file – 用于在Windows 7中更改屏幕分辨率的批处理文
- windows-7 – 在IE8中调试UI问题(在Windows 7身份验证混乱中
- 《如何将windows上的软件包或文件上传到linux服务上》
- .net – 如何在Windows 7中打开GCStress?
- windows-8 – Windows 8 HTML / JavaScript Metro Apps中的
- 自动安装 – 使用Powershell和Hyper-V无人值守安装Windows