Form.CreateGraphics()返回错误的Dpi

时间:2017-10-09 10:12:57

标签: c# winforms

我有一些WinForms应用程序在一些Windows Update之后开始出现奇怪的行为。 因此,我将字体比例设置设置为 125%(120 Dpi)。之后该应用程序开始缩短文本。调查后我找到原因,方法this.CreateGraphics()返回Graphics对象DpiX/DpiY == 96,即使在OnPaint() e.Graphics中有DpiX/DpiY == 120。怎么可能?

P.S。如果我在Graphics.FromHwnd中执行OnPaint(),它仍会返回96 Dpi。

p.s2。 Dpi虚拟化已禁用

更新

经过额外的调查后,我能够在一个简单的应用程序中重现这种行为。 默认情况下,应用程序使用 Dpi虚拟化运行(如果清单文件中未设置任何内容且未调用SetProcessDPIAware)。

为了弄乱 Dpi SetProcessDPIAware应该在创建表单后调用。之后会发生两件奇怪的事情:

  1. Form.OnPaint方法将有不同的e.Graphics.DpiX取决于焦点是什么控件,例如,如果正在调整Forms的大小OnPaint被调用而DpiX == 96,如果将鼠标移到使用DpiX == 120调用任何Button OnPaint
  2. UserControl的
  3. OnPaint始终具有DpiX == 120,但this.CreateGraphics()返回DpiX == 96。
  4. 我仍然不明白为什么不同的组件有不同的 Dpi

    Change Windows scaling

0 个答案:

没有答案