对于使用 .NET Framework 4.5.2 的某些 Windows 窗体应用程序的异常缩放

症状

如果为高 DPI 设置实现自己的缩放逻辑的Windows 窗体应用程序通过使用以下 .config 文件设置选择加入 4.5.2 Microsoft .NET Framework 高 DPI 更改,则这些应用程序可能会遇到异常缩放:

<appSettings>

 <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />

</appSettings>

      

解决方法

在缩放值之上应用缩放因子的应用程序在选择加入 .NET Framework 4.5.2 高 DPI 改进时,将遇到额外的缩放。 若要解决此问题,请更新应用程序的缩放逻辑,以对 ToolStrip.ImageScalingSize 默认值应用缩放。 此更改将避免引入额外的缩放。 

例如,具有以下代码的应用程序将缩放 ToolStrip 按钮两次:

public MyToolStrip()

{

 IntPtr hDC = GetDC(new HandleRef(null, IntPtr.Zero));

 double xFactor = GetDeviceCaps(new HandleRef(null, hDC), LOGPIXELSX) / 96.0;

 double yFactor = GetDeviceCaps(new HandleRef(null, hDC), LOGPIXELSY) / 96.0;

 this.ImageScalingSize = new Size((int)(this.ImageScalingSize.Width * xFactor), (int)(this.ImageScalingSize.Height * yFactor));

 InitializeComponent();

}

可以使用以下代码从恒定默认大小或所需的图像大小进行缩放:

this.ImageScalingSize = new Size((int)(16 * xFactor), (int)(16 * yFactor));