0

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

' Edit ' 我发现使用 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 应用程序中使用此“技巧”时,主窗体会调整大小,但对于某些其他窗体,不会应用缩放 + 更改的字体。

4

2 回答 2

2

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

有关如何从 C#/VB.Net 调用它的信息,请参阅此链接:
http ://www.pinvoke.net/default.aspx/user32/setprocessdpiaware.html

于 2010-05-26T12:37:14.873 回答
0

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

于 2010-11-02T13:38:24.303 回答