检测窗口字号(100%,125%,150%)

我创build了一个完美的应用程序,直到用户select125%或150%。 这会打破我的申请。 后来我发现了一种通过检测DPI来查找字体大小的方法。

这个工作很好,直到用中文版本的Windows 7开始使用我的应用程序。 整个应用程序在中文窗口7中断。从我所知道的(我不能真正testing它,因为我只有英文版本和安装语言包不会导致问题)中国字符造成了一个奇怪的DPI,打破了我的申请。

我现在的代码是这样的:

if (dpi.DpiX == 120) //For 125% fonts { //Resize form and set default font to correct problems } else if (dpi.DpiX == 96) //For 100 and 150% fonts { //Resize form and set default font to correct problems } 

在英文版本的Windows 7上,这个版本很好用,但不知何故,中文版本正好跳过了这个版本,而且表格本身也被破坏了,控件甚至没有显示出来,字体也非常大,推动了这个问题,图片框被移动了。

那么,在没有检测API的情况下,检测窗口字体比例(100%,125%和150%)的好方法是什么? 我需要一些可以在所有的Windows 7操作系统和语言上运行的东西。

处理variablesDPI设置的正确方法不是检测它们,而是在switch语句中手动调整控件的大小(对于初学者来说,比在if语句中显示的可能性要多得多)。

相反,您应该将AutoScaleMode属性设置为AutoScaleMode ,并让框架为您处理。

将下面的代码添加到您的窗体的构造函数(或在devise时设置此属性):

 this.AutoScaleMode = AutoScaleMode.Dpi; 

尽pipe您可能更喜欢使用AutoScaleMode.Font 。 有关自动缩放的更多信息,请参阅MSDN文档 。

对于C ++ / Win32用户,这里有一个很好的参考: 编写高DPI Win32应用程序 。