..NET Framework 4.5.2 を使用する一部の Windows フォーム アプリケーションの異常なスケーリング

現象

高 DPI 設定用の独自のスケーリング ロジックを実装するWindows フォーム アプリケーションで、次の .config ファイル設定を使用して Microsoft .NET Framework 4.5.2 高 DPI の変更を有効にすると、異常なスケーリングが発生する可能性があります。

<appSettings>

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

</appSettings>

      

解決策

スケーリングされた値の上にスケーリング係数を適用するアプリケーションは、.NET Framework 4.5.2 の高 DPI の機能強化を有効にすると、追加のスケーリングが発生します。 この問題を解決するには、アプリケーションのスケーリング ロジックを更新して、 ToolStrip.ImageScalingSize の既定値にスケーリングを適用します。 この変更により、余分なスケーリングの導入が回避されます。 

たとえば、次のコードを含むアプリケーションでは、ツールストリップ ボタンを 2 倍に拡大/縮小します。

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));