C#WinForms禁用DPI缩放

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

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

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

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

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

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

您可以将窗体的AutoScaleMode属性设置为None

在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(); } }