Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 从.net 2.0 WinForms应用程序以编程方式设置DPI_Windows_Winforms_Dpi - Fatal编程技术网

Windows 从.net 2.0 WinForms应用程序以编程方式设置DPI

Windows 从.net 2.0 WinForms应用程序以编程方式设置DPI,windows,winforms,dpi,Windows,Winforms,Dpi,我想在96dpi上运行我的应用程序,无论Windows的dpi大小设置为多少。有可能吗 “编辑” 我发现使用Scale()方法和调整字体大小几乎可以达到目的 public class MyForm : Form { private static bool ScaleDetected = false; const float DPI = 80F; protected override void OnPaint(PaintEventArgs e) {

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

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

有关如何从C#/VB.Net调用它的信息,请参见此链接:

应将AutoScaleMode设置为AutoScaleMode。无可防止自动缩放