检测窗口字号(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应用程序 。