检测Windows字体大小(100%,125%和150%)

问题描述 投票:40回答:3

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

在中文版Windows 7开始使用我的应用程序之前,这一点很有用。整个应用程序在中文Windows 7上中断。据我所知(我不能真正测试它因为我只有英文版和安装语言包不会导致问题)中文字符导致一个奇怪的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上工作得很好,但不知何故中文版本就这样跳过,而且表格会自行破坏,控件甚至不显示,字体非常大并且超越了问题,图片框被移动了。

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

c# .net winforms windows-7 cjk
3个回答
18
投票

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

相反,您应该将表单的AutoScaleMode property设置为AutoScaleMode.Dpi,并让框架为您处理此问题。

将以下代码添加到表单的构造函数中(或在设计时设置此属性):

this.AutoScaleMode = AutoScaleMode.Dpi;

虽然您可能更喜欢使用AutoScaleMode.Font。有关自动缩放的更多信息,请参阅the MSDN documentation


5
投票

对于C ++ / Win32用户,这里有一个很好的参考:Writing High-DPI Win32 Applications


0
投票

如果您在较新版本的Windows上我建议重新安装您的显卡驱动程序(例如安装新版本)我有同样的问题,我的显示比例设置为100%,但字体是关闭的。希望这可以解决您的问题

© www.soinside.com 2019 - 2024. All rights reserved.