首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测Windows字体大小(100%、125%和150%)

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

Stack Overflow用户
提问于 2012-02-21 14:38:26
回答 4查看 76.8K关注 0票数 46

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

在使用中文版Windows 7的用户开始使用我的应用程序之前,我的应用程序一直运行得很好。整个应用程序在中文Windows 7上崩溃了。据我所知(我不能真正测试它,因为我只有英文版本,安装语言包不会导致问题)中文字符导致一个奇怪的DPI中断我的应用程序。

我当前的代码是这样工作的:

代码语言:javascript
复制
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上运行得很好,但不知何故中文版本跳过了这一点,窗体自我破坏,控件甚至都没有显示,字体非常大,推过了这个问题,图片框被移动。

那么,检测Windows字体比例(100%、125%和150%)而不检测DPI的好方法是什么?我需要一些坚固的东西,可以在所有Windows-7操作系统和语言上运行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-21 15:25:56

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

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

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

代码语言:javascript
复制
this.AutoScaleMode = AutoScaleMode.Dpi;

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

票数 19
EN

Stack Overflow用户

发布于 2013-10-18 15:14:59

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

票数 5
EN

Stack Overflow用户

发布于 2021-03-06 19:14:40

使用以下命令获取系统DPI规模:

从位于Computer\HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics中的注册表AppliedDPI dword读取。然后除以96

代码语言:javascript
复制
try
{
    double scale = 1.0;
    using (RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics"))
    {
        if (key != null)
        {
            Object o = key.GetValue("AppliedDPI");
            if (o != null)
            {
                int value = (int)o;
                scale = (double)value / 96.0;
            }
        }
    }
}
catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
{
    //react appropriately
}

为100% -->值为96比例尺为1.0为125% -->值为120比例尺为1.25为150% -->值为144比例尺为1.5

现在您可以自动调整窗体大小,并按此比例设置新的字体大小;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9373260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档