【问题标题】:Programmatically set the DPI from a .net 2.0 WinForms application从 .net 2.0 WinForms 应用程序以编程方式设置 DPI
【发布时间】:2011-02-24 04:04:34
【问题描述】:

我想在 96dpi 上运行我的应用程序,无论 Windows 的 dpi 大小设置为多少。有可能吗?

'编辑' 我发现使用 Scale() 方法并调整字体大小几乎可以解决问题。

public class MyForm : Form
{
    private static bool ScaleDetected = false;
    const float DPI = 80F;

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        if (!ScaleDetected)
        {
            Graphics g = e.Graphics;
            float factorX = DPI / g.DpiX;
            float factorY = DPI / g.DpiY;

            SizeF newSize = new SizeF(factorX, factorY);

            AutoScaleDimensions = newSize;
            AutoScaleMode = AutoScaleMode.Dpi;

            Scale(newSize);
            Font = new Font(Font.FontFamily, Font.Size * factorX);

            ScaleDetected = true;
        }
    }
}

但是,当在使用 Janus Controls 的 MDI 应用程序中使用此“技巧”时,主窗体会调整大小,但对于某些其他窗体,则不会应用缩放 + 更改的字体。

【问题讨论】:

    标签: windows winforms dpi


    【解决方案1】:

    您应该将 AutoScaleMode 设置为 AutoScaleMode.None 以防止自动缩放

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想禁用自动 DPI 缩放。如果是这样,我认为您只需致电 SetProcessDPIAware 告诉 Windows 您将自己处理。

      查看此链接了解如何从 C#/VB.Net 调用它:
      http://www.pinvoke.net/default.aspx/user32/setprocessdpiaware.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-30
        • 2018-11-14
        • 2012-05-12
        • 2010-10-04
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多