You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取Windows文本缩放值?WinForms窗体缩放适配及禁用方法咨询

WinForms 文本缩放适配问题解决方案

1. 读取文本缩放值并适配控件

可以通过两种方式获取系统文本缩放比例,用于调整控件的大小、位置和字体:

  • 通过DPI计算(推荐)
    WinForms默认96DPI对应100%缩放,用当前窗体的DPI除以96就能得到缩放比例:
using System.Drawing;

// 在窗体或控件代码中获取缩放比例
float scaleX = this.CreateGraphics().DpiX / 96f;
float scaleY = this.CreateGraphics().DpiY / 96f;

比如系统设置125%缩放时,DpiX/DpiY为120,计算后scaleX/Y就是1.25。拿到比例后,直接用它调整控件参数:

// 调整控件大小:原100x50按缩放比例放大
label1.Size = new Size((int)(100 * scaleX), (int)(50 * scaleY));
// 调整字体大小
label1.Font = new Font(label1.Font.FontFamily, label1.Font.Size * scaleX);
  • 通过SystemInformation获取
    也可以通过显示器分辨率和工作区的比例计算缩放百分比:
using System.Windows.Forms;

int scalingPercent = SystemInformation.PrimaryMonitorSize.Width * 100 / SystemInformation.WorkingArea.Width;

这种方式依赖显示器设置,准确性不如DPI方法。

2. 针对特定窗体禁用或强制文本缩放

方法一:关闭自动缩放

直接设置窗体的AutoScaleMode为None,系统就不会自动缩放该窗体,但需要自己手动处理所有控件的适配:

public Form1()
{
    InitializeComponent();
    this.AutoScaleMode = AutoScaleMode.None;
}

方法二:强制固定缩放比例

如果要让窗体强制使用特定缩放值(比如100%),可以调用Win32API设置窗体的DPI感知模式(仅支持Windows 10及以上):
首先引入API声明:

[DllImport("user32.dll")]
private static extern IntPtr SetWindowDpiAwarenessContext(IntPtr hWnd, IntPtr dpiContext);

// 对应每显示器DPI感知V2模式,可用于强制自定义DPI
private static readonly IntPtr DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new IntPtr(-4);

然后在窗体创建时设置:

protected override void OnHandleCreated(EventArgs e)
{
    base.OnHandleCreated(e);
    // 强制窗体使用指定的DPI感知模式,从而固定缩放比例
    SetWindowDpiAwarenessContext(this.Handle, DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
}

方法三:手动处理DPI变化

如果需要在系统DPI变化时保持窗体原有缩放比例,可以订阅DpiChanged事件,手动调整控件:

protected override void OnDpiChanged(DpiChangedEventArgs e)
{
    base.OnDpiChanged(e);
    // 计算缩放比例,用旧DPI除以新DPI,抵消系统缩放
    float scaleX = e.OldDpi.X / (float)e.NewDpi.X;
    float scaleY = e.OldDpi.Y / (float)e.NewDpi.Y;
    // 整体缩放窗体和控件
    this.Scale(new SizeF(scaleX, scaleY));
}

内容的提问来源于stack exchange,提问作者Alain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:48:15