Windows应用程序 - DPI问题

Bra*_*rad 5 windows mfc 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配置更改.

到目前为止,我还没有找到解决问题的方法.

有人可以更熟悉这个主题,请回复并指出我的正确方法吗?

谢谢

小智 2

您无法在 120 DPI 设置上强制 DPI 虚拟化。我自己对产品进行了调查,因为在高 DPI 下的模糊外观似乎是一个很好的权衡。

我们最终对 UI 定位和缩放进行了完全重写,以使其在高 DPI 设置下与字体缩放一起正确缩放。客户端现在完全支持 DPI,并且可以在任何 DPI 设置中正确缩放。

在我们的案例中,为一个相当复杂的客户完成这项工作需要一个人大约 3 个月的时间。

我们有一个从未尝试过的辅助计划,但它可能对您有用:在启动时读取操作系统的 DPI 缩放因子。然后按此系数减少所有字体实例,以便当 Windows 再次放大字体时,它们会恢复到 UI 可以容纳它们的大小。当然,具有高 DPI 设置的用户不会在您的应用程序中获得更大的字体,但至少可以使用。