MFC应用程序现在默认为支持DPI

大家好,我是Pat Brenner,是Visual C++图书馆团队的开发人员,主要负责MFC。  我想让您了解我们在visualstudio2010中对MFC应用程序所做的一个微妙但有意义的更改:所有MFC应用程序现在都默认标记为“DPI-aware”。  这意味着您的应用程序需要处理各种DPI(每英寸点数)设置,而不仅仅是默认设置(96 DPI),因为Windows不会自动缩放应用程序的用户界面元素以匹配系统的选定DPI。

null

使用控制面板中的显示设置设置系统的DPI,如下所示。  下面显示的“较小”设置对应于96 DPI,而“中等”和“较大”设置分别对应于120和144 DPI。

图片[1]-MFC应用程序现在默认为支持DPI-yiteyi-C++库

这里的术语有点混乱,因为这些设置并不能真正操纵每英寸点数的值。  这个值实际上是由显示器的分辨率控制的,分辨率越高,屏幕上的每英寸点数就越多。  这些设置所做的是通过使文本和其他视觉元素变大(使用更多像素)来补偿更高的分辨率,这样它们在屏幕上就不会显得太小。

MFC已经更新,可以处理所有必要的调整,以支持它所绘制的用户界面元素中的DPI感知场景。  打开DPI感知将触发在MFC中使用适当的缩放机制,以便用户界面中使用的字体和图像将显示得更清晰。

例如,下面是一个基于功能区的应用程序的屏幕截图,该应用程序在使用“较大”设置(144 DPI)的系统上运行,没有启用DPI感知标志。  Windows正在自动将UI元素扩展到更大的大小。  请注意,有些元素看起来有点模糊。

图片[2]-MFC应用程序现在默认为支持DPI-yiteyi-C++库

下面是同一个应用程序的另一个屏幕截图,运行在同一个系统上,DPI awareness标志处于打开状态。  请注意所使用的文本和图像在清晰度上的差异。  MFC正在缩放文本,在某些情况下使用不同的图像。

图片[3]-MFC应用程序现在默认为支持DPI-yiteyi-C++库

对于使用MFC的开发人员来说,这意味着您需要确保在应用程序中执行的任何自定义绘图都能够处理各种DPI设置,并根据需要进行调整,以便应用程序在各种DPI设置中保持一致。

此更改通过全局生成属性文件Microsoft.CPP.Props中的设置完成,如果项目使用MFC,则通过静态MFC库或共享MFC DLL将“enabledPiaware”标志设置为“true”。  当这个标志被设置为“true”时,一个额外的清单片段被链接到应用程序中,它告诉Windows应用程序是DPI感知的。  请注意,此设置甚至适用于在早期版本的visualstudio中创建的MFC应用程序使用MFC的任何应用程序都将标记为DPI-aware。

当然,这只是默认值,如果您愿意,可以覆盖它。  这意味着Windows将为您自动缩放应用程序的UI元素。  这可以通过在应用程序的“Manifest Tool”属性的“Input and Output”部分将“Enable DPI Awareness”属性设置为“No”来实现,如下所示:

图片[4]-MFC应用程序现在默认为支持DPI-yiteyi-C++库

关于在MSDN上编写支持DPI的应用程序,还有一个更详细的主题 在这里 .  请注意,以上信息更新了该主题的某些部分。

我希望这些信息对你有帮助。  你有什么问题尽管问,我会尽力回答的。

帕特·布伦纳

Visual C++开发

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享