C#的WinForms禁用DPI缩放C#的WinForms禁用DPI缩放(C# WinForms d

2019-05-12 03:28发布

我有举办许多图像的WinForm应用程序。 当我把应用程序在具有120°的DPI一个Win7的机器,它彻底破坏形式的外观。 有没有一种方法来禁用我的形式缩放?

我知道,这是一件不建议和DPI应该是无缝的,由操作系统来处理。 但是,当涉及到皮肤的应用程序,图像不能很好地扩展。 我没有对所有的DPI变化创建图像的奢侈品,所以请不要认为作为一个答案。

Answer 1:

当您更改AutoScaleMode资源,就会有更大的问题。 增加DPI也改变了系统字体大小。 未必如此,字体大小以点为单位,72英寸来表示。 这些字体还要大些,以获得相同的点大小的DPI增加时,保持文本一样可读距离相同的距离观看时。

由于控制没有得到了调整,上的文字,比方说,一个按钮不再适合。 战斗的一种方法是按比例改变控件的字体大小。 如果你让所有的控件继承形式的字体,只是改变了形式的字体属性容易自动更新控制以及。 明显缺点是,用户将有一个更难的时间阅读的文本。 当DPI去每英寸超过150点这一点尤其得到坏,你的UI只是变成不可用的邮票。

是的,背景图像需要得到缩放以适应较大的控制或形式。 在图像中的像素如今已不再一个映射到一到显示器的像素。 默认值Graphics.InterpolationMode不过滤图像的一个相当体面的工作。 但是这取决于图像的种类如何,轮流出来。 一张照片几乎都是做的非常好。 非常详细的艺术线条和文字不。 挑选正确的图像很长的路要走,以避免必须创建单独的。

这个问题不会消失,直到显示器开始有那种分辨率的打印机。 我们仍然从600 dpi的桌面显示器很长的路要走。 手机将成为第一。



Answer 2:

添加一行代码在Form1构造函数在InitializeComponent来自动生成调用之前解决了这个问题对我来说:

public partial class Form1 : Form
{
    public Form1()
    {
        // Make the GUI ignore the DPI setting
        Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
        InitializeComponent();
    }
}


Answer 3:

您可以设置AutoScaleMode形式的财产None



文章来源: C# WinForms disable DPI scaling