C#WinForms禁用DPI缩放

Mar*_*rkP 9 c# dpi scale winforms

我有一个WinForm应用程序,它承载了许多图像.当我将应用程序放在DPI为120的Win7机器上时,它完全破坏了表单的外观.有没有办法禁用我的表单缩放?

我知道这是不建议的事情,DPI应该是无缝的并由操作系统处理.但是当谈到皮肤应用程序时,图像不能很好地扩展.我没有为所有DPI变体创建图像的奢侈,所以请不要建议作为答案.

Han*_*ant 11

更改AutoScaleMode属性时会出现更大的问题.增加DPI也会更改系统字体大小.必然如此,字体大小以1/72英寸的点表示.当DPI增加时,字体需要更大以获得相同的点大小,并且当从相同距离观看时保持文本可读.

由于控件不再调整大小,因此按钮上的文字不再适合.解决此问题的一种方法是按比例更改控件上的字体大小.如果让所有控件继承表单字体很简单,只需更改表单的Font属性即可自动更新控件.明显的缺点是用户将难以阅读文本.当DPI达到每英寸150点以上时,这尤其会变坏,您的UI只会变成无法使用的邮票.

是的,背景图像需要缩放以适应更大的控件或形式.现在,图像中的像素不再一对一地映射到监视器的像素.默认的Graphics.InterpolationMode值可以很好地过滤图像.但这取决于图像的类型,结果如何.照片几乎总是很好地扩展.精细的线条艺术和文字没有.选择正确的图像对于避免必须创建单独的图像有很大帮助.

在显示器开始具有打印机具有的分辨率之前,这个问题不会消失.对于台式机显示器,我们距离600 dpi还有很长的路要走.手机将是第一位的.

  • 600 DPI 屏幕正在成为现实。看看你的手机(好吧,这里不是 600,而是 480)。未来就在这里。 (2认同)

小智 8

创建一个应用程序清单文件(右键单击项目/添加/新项目/应用程序文件)并取消注释此部分:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware
  </windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)

本网站的信用:https ://www.telerik.com/blogs/winforms-scaling-at-large-dpi-settings-is-it-even-possible-


小智 6

在自动生成的对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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在具有 150% 缩放比例的 4K 显示器的 Windows 10 上根本不起作用 (2认同)
  • 即使使用AutoScaleMode = None,即使在150%或200%的Windows 10上也不起作用 (2认同)