現象
高 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));