我们目前的一个Win32 MFC应用程序存在问题,无法在使用高dpi设置的显示器上正确渲染。具体来说,在选择了120 dpi的Windows XP中,应用程序中有几个地方的文本会放大,但其容器不会跟随放大(例如文本溢出其按钮边界等)。当选择了“使用XP样式DPI缩放”时,Windows 7(和Vista)也会发生这种情况,而且dpi>96时也是如此。如果未选择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配置更改。
到目前为止,我还没有找到实现任何解决方案的方法。请求了解更多相关知识的人能够回复并指引我正确的方向吗?
谢谢。
如果我编辑应用程序清单以声明应用程序为“DPI感知”,则会关闭DPI虚拟化(但不关闭XP样式DPI缩放),这对我没有任何帮助。事情仍然看起来非常糟糕(120 dpi没有变化,144 dpi现在已经崩溃)。
我需要解决这个问题,我尝试阅读了关于DPI /缩放问题的一般信息,这是一次学习经历。到目前为止,我还没有找到合适的解决方案。目前我没有打算进行彻底且正确的修复(应用程序根据dpi正确缩放所有元素)。那将涉及大量重写。我认为有两种可能的解决方案。一种是完全关闭任何形式的DPI缩放。这意味着如果用户的Win7系统设置为120 dpi,则其系统中的所有内容都会看起来很好/大,但我们的应用程序将看起来正确但与其他应用程序中的所有内容相比较小。第二个解决方案是在某种程度上强制我们的应用程序使用DPI虚拟化,但永远不要使用XP样式DPI缩放。我希望这是一个应用程序端的更改,而不是依赖于最终用户进行Windows配置更改。
到目前为止,我还没有找到实现任何解决方案的方法。请求了解更多相关知识的人能够回复并指引我正确的方向吗?
谢谢。