Windows Forms
type: Concept
definition: デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。
alternative label: WinForms
requires: DPI認識モード
uses: AutoScaleMode

DPI認識モード
type: Concept
definition: アプリが「自分はどこまでDPIを扱えるか」をOSに申告する区分。Unaware・System Aware・Per-Monitor・Per-Monitor V2の4つを基本とする。
alternative label: DPI Awareness
alternative label: DPI_AWARENESS_CONTEXT
uses: Unaware(DPI非対応)
uses: System DPI Aware
uses: Per-Monitor(V1)
uses: Per-Monitor V2(PMv2)
uses: GDIスケーリング

Unaware(DPI非対応)
type: Concept
definition: DPI認識モードを何も宣言しない既定の状態で、アプリからは常に96 DPIに見える。
alternative label: DPI Unaware
may cause: DPI仮想化

System DPI Aware
type: Concept
definition: サインイン時の主モニターのDPIに合わせて描画が固定されるDPI認識モード。主モニター以外や、サインイン後にDPIが変わった場合はOSが拡大表示する。WPFは宣言なしでこの状態になる。
alternative label: System Aware
alternative label: システムDPI認識

Per-Monitor(V1)
type: Concept
definition: ウィンドウがあるモニターのDPIをトップレベルウィンドウへ通知するだけで、スケーリングは全部自前で処理する必要があるDPI認識モード。
alternative label: Per-Monitor DPI Aware
not recommended for: Windows Forms

Per-Monitor V2(PMv2)
type: Concept
definition: 子ウィンドウまでDPI変更が通知され、タイトルバーなど非クライアント領域はOSが自動でスケールするDPI認識モード。Windows 10 (1703)以降で利用できる。
alternative label: Per Monitor V2
alternative label: PMv2

GDIスケーリング
type: Concept
definition: アプリとしてはUnawareのまま、GDIで描かれるテキストや図形だけをOSがベクターレベルで拡大する、Windows 10 1809以降の改良版ビットマップ拡大。
alternative label: DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED

DPI仮想化
type: Concept
definition: DPI対応を宣言していないアプリに対し、OSが「画面は96 DPIだ」と偽って描かせ、その結果をビットマップとして拡大表示する救済措置。レイアウトは崩れない代わりに全体がにじむ。
alternative label: DPI Virtualization
alternative label: ビットマップストレッチ

DeviceDpi基準の自前描画スケーリング
type: Concept
definition: Control.DeviceDpiを基準に96 DPI換算の設計値を現在のDPIへ変換する、自前描画コントロールのスケーリング手法。
alternative label: Control.DeviceDpi

AutoScaleMode
type: Concept
definition: DPI認識モードとは別に、WinFormsのフォーム(ContainerControl)自身が持つ、デザイン時と実行時の環境差を吸収する自動スケーリング機構。
alternative label: WinFormsの自動スケーリング機構
uses: AutoScaleDimensions

AutoScaleDimensions
type: Concept
definition: デザイン時の環境での基準値(フォームのフォント寸法など)をDesigner.csに記録する、AutoScaleModeの基準値プロパティ。
alternative label: AutoScaleDimensions プロパティ

デザイナーの高DPI事故
type: Concept
definition: 150%等の高DPIモニターでWinFormsデザイナーを開いてフォームを保存すると、Designer.csのAutoScaleDimensionsや座標・サイズが高DPI環境の値で上書きされ、100%環境でビルドするとレイアウトが縮んで見える事故。
alternative label: Designer.csの高DPI破壊

exeプロパティの高DPI設定上書き
type: Concept
definition: exeファイルのプロパティ「互換性」タブから、利用者側でそのアプリのDPIスケーリング動作を上書きできる設定。
alternative label: 互換性タブの高DPI設定の変更

Mixed-Mode DPI Scaling
type: Concept
definition: Windows 10 1607以降、SetThreadDpiAwarenessContextによってトップレベルウィンドウ単位で異なるDPI認識モードを混在させられる仕組み。
alternative label: トップレベルウィンドウ単位のDPI認識モード混在

.NETの高DPI設定(ApplicationHighDpiMode/SetHighDpiMode)
type: Concept
definition: .NET(Core 3.1以降)のWinFormsアプリで、プロジェクトファイルのApplicationHighDpiModeプロパティまたはコードのApplication.SetHighDpiMode呼び出しによりDPI認識モードを宣言する仕組み。既定はSystemAware。
alternative label: ApplicationHighDpiMode
alternative label: Application.SetHighDpiMode

app.configでのDPI宣言
type: Concept
definition: .NET Framework 4.7以降のWinFormsで、app.configのSystem.Windows.Forms.ApplicationConfigurationSectionにDpiAwarenessキーを設定してDPI認識モードを宣言する方法。
alternative label: System.Windows.Forms.ApplicationConfigurationSection
alternative label: DpiAwareness設定
not recommended for: マニフェストでのDPI宣言

マニフェストでのDPI宣言
type: Concept
definition: 実行ファイルに埋め込むマニフェストのdpiAware(Vista以降)/dpiAwareness(Windows 10 1607以降)要素でDPI認識モードを宣言する方法。
alternative label: dpiAware
alternative label: dpiAwareness

subject: Windows Forms
predicate: requires
object: DPI認識モード
description: WinFormsアプリの高DPI対応の第一歩は、自分のアプリが今どのDPI認識モードで動いているかを把握することである。
evidence: setting-the-default-dpi-awareness-for-a-process
verified at: 2026-08-01
certainty: established

subject: DPI認識モード
predicate: uses
object: Unaware(DPI非対応)
description: DPI認識モードの選択肢の1つが、何も宣言しない既定のUnawareである。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: DPI認識モード
predicate: uses
object: System DPI Aware
description: DPI認識モードの選択肢の1つが、サインイン時の主モニターDPIに固定されるSystem Awareである。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: DPI認識モード
predicate: uses
object: Per-Monitor(V1)
description: DPI認識モードの選択肢の1つが、通知のみでスケーリングを自前実装するPer-Monitor(V1)である。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: DPI認識モード
predicate: uses
object: Per-Monitor V2(PMv2)
description: DPI認識モードの選択肢の1つが、非クライアント領域もOSが追従するPer-Monitor V2である。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: DPI認識モード
predicate: uses
object: GDIスケーリング
description: DPI認識モードに準じる選択肢として、コードを変えずに文字のにじみだけ軽減できるGDIスケーリングがある。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: Unaware(DPI非対応)
predicate: mayCause
object: DPI仮想化
description: DPI対応を宣言していないアプリ(Unaware)には、OSが「画面は96 DPIだ」と偽ってビットマップ拡大するDPI仮想化が働く。
evidence: high-dpi-desktop-application-development-on-windows
verified at: 2026-08-01
certainty: established

subject: Per-Monitor(V1)
predicate: notRecommendedFor
object: Windows Forms
description: Per-Monitor(V1)は通知が来るだけでスケーリングを全部自前で処理する素のWin32向けの仕組みで、フレームワーク支援がなくWinFormsから選ぶ理由がない。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: established

subject: Per-Monitor V2(PMv2)
predicate: requires
object: DeviceDpi基準の自前描画スケーリング
description: Per-Monitor V2ではモニター間移動のたびにDeviceDpiが変わるため、自前描画はDpiChanged系イベントでキャッシュ値を作り直す設計が必要になる。
evidence: high-dpi-support-in-windows-forms
verified at: 2026-08-01
certainty: context-dependent

subject: Windows Forms
predicate: uses
object: AutoScaleMode
description: WinFormsのフォームはDPI認識モードとは別に、AutoScaleModeという自動スケーリング機構を持つ。
evidence: autoscale
verified at: 2026-08-01
certainty: established

subject: AutoScaleMode
predicate: uses
object: AutoScaleDimensions
description: AutoScaleModeは、デザインした環境での基準値をAutoScaleDimensionsとしてDesigner.csに記録し、実行時の環境値と比較して子コントロールを拡大縮小する。
evidence: autoscale
verified at: 2026-08-01
certainty: established

subject: AutoScaleDimensions
predicate: mayCause
object: デザイナーの高DPI事故
description: AutoScaleDimensionsはデザイン時の環境値を記録する仕組みであるため、150%モニターでデザイナーを開いて保存すると値が書き換わり、100%環境でのビルド時にレイアウトが縮んで見える事故につながることがある。
evidence: disable-dpi-awareness
verified at: 2026-08-01
certainty: context-dependent

subject: exeプロパティの高DPI設定上書き
predicate: uses
object: GDIスケーリング
description: 互換性タブの高DPI設定で「システム(拡張)」を選ぶと、GDIスケーリングが適用されGDI描画のテキストだけくっきりする。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: context-dependent

subject: exeプロパティの高DPI設定上書き
predicate: uses
object: DPI仮想化
description: 互換性タブの高DPI設定で「システム」を選ぶと、DPI仮想化を強制する(崩れないがにじむ)。
evidence: dpi-awareness-context
verified at: 2026-08-01
certainty: context-dependent

subject: Mixed-Mode DPI Scaling
predicate: uses
object: Per-Monitor V2(PMv2)
description: 本記事が想定する段階移行のシナリオでは、Mixed-Modeは、メイン画面をPer-Monitor V2にしつつ直しきれないダイアログをUnawareのままOSに拡大させるという段階移行をWin32レベルでサポートする。
evidence: high-dpi-improvements-for-desktop-applications
verified at: 2026-08-01
certainty: context-dependent

subject: Windows Forms
predicate: uses
object: .NETの高DPI設定(ApplicationHighDpiMode/SetHighDpiMode)
description: .NET(Core 3.1以降)のWinFormsは、プロジェクトファイルのApplicationHighDpiModeまたはApplication.SetHighDpiModeでDPI認識モードを宣言する。
evidence: net60
verified at: 2026-08-01
certainty: context-dependent

subject: app.configでのDPI宣言
predicate: notRecommendedFor
object: マニフェストでのDPI宣言
description: マニフェストのdpiAware/dpiAwareness記述はapp.configのDpiAwareness設定を上書きするため、マニフェストで宣言しているアプリにapp.config側の設定を併用することは公式に推奨されていない。併記自体はでき、マニフェストが優先される
evidence: high-dpi-support-in-windows-forms
verified at: 2026-08-01
certainty: established

subject: Windows Forms
predicate: uses
object: マニフェストでのDPI宣言
description: .NET Framework 4.6以下やVB6/MFC混在アプリでは、マニフェストでSystem Awareを宣言するところまでが現実的な対応になる。
evidence: setting-the-default-dpi-awareness-for-a-process
verified at: 2026-08-01
certainty: context-dependent

subject: Windows Forms
predicate: uses
object: app.configでのDPI宣言
description: .NET Framework 4.7以降は、マニフェストでWindows 10互換を宣言したうえで、app.configのDpiAwareness設定でPer-Monitor V2などを宣言する。
evidence: high-dpi-support-in-windows-forms
verified at: 2026-08-01
certainty: context-dependent

subject: System DPI Aware
predicate: shouldPrecede
object: Per-Monitor V2(PMv2)
description: 対応レベルの引き上げは、まずSystem Aware化で主モニターをくっきりさせることを第一段階とし、利用環境とアプリの寿命が見合う場合にPer-Monitor V2完全対応を第二段階として進める2段構えが現実的とされる。
evidence: high-dpi-desktop-application-development-on-windows
verified at: 2026-08-01
certainty: context-dependent

subject: System DPI Aware
predicate: requires
object: AutoScaleMode
description: WinFormsアプリがフレームワークの自動スケーリングに任せている場合、System Awareにすると起動時の主モニターDPIに合わせたスケーリングが一度だけ働き、主モニター上ではくっきり表示される。System AwareはWinForms固有ではないプロセス単位の設定であり、AutoScaleMode.Noneにして自前でレイアウトすることもできる。
evidence: autoscale
verified at: 2026-08-01
certainty: context-dependent