知識マップ: WinFormsの高DPI対応 ── 4Kモニターでぼやける・崩れる原因と現実的な対処

記事「WinFormsの高DPI対応 ── 4Kモニターでぼやける・崩れる原因と現実的な対処」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

WinFormsアプリが高DPI環境でぼやけるのは、DPI認識モードを宣言していないUnawareアプリに対してOSがDPI仮想化(ビットマップ拡大)を働かせる救済措置であり、逆にくっきりしているのに崩れるのはDPI対応を宣言したのにレイアウトが追従できていない状態である。System AwareはWinFormsのAutoScaleModeによる起動時一度きりのスケーリングで主モニターだけをくっきりさせ、モニター間移動まで追従させるにはPer-Monitor V2への完全対応が必要になる。設定方法は.NET・.NET Framework 4.7以降・4.6以下で異なり、マニフェストのdpiAware宣言とapp.configのDpiAwareness設定は併用してはならない。高DPIモニターでWinFormsデザイナーを開いてフォームを保存するとAutoScaleDimensionsが書き換わる事故が定番で、対策はデザイナーを100%で開くことである。

WinFormsの高DPI対応の知識マップWinFormsアプリのDPI認識モード(Unaware・System Aware・Per-Monitor V1/V2・GDIスケーリング)がDPI仮想化やAutoScaleMode、デザイナーの高DPI事故、世代別の設定方法とどう結び付くかを示す図。前提とする利用する利用する利用する利用する利用する原因になり得る用いるのは非推奨前提とする利用する利用する原因になり得る利用する利用する利用する利用する用いるのは非推奨利用する利用するより先に行うべき前提とするWindows FormsDPI認識モードUnaware(DPI非対応)System DPI AwarePer-Monitor(V1)Per-Monitor V2(PMv2)GDIスケーリングDPI仮想化DeviceDpi基準の自前描画スケーリングAutoScaleModeAutoScaleDimensionsデザイナーの高DPI事故exeプロパティの高DPI設定上書きMixed-Mode DPI Scaling.NETの高DPI設定(ApplicationHighDpiMode/SetHighDpiMode)app.configでのDPI宣言マニフェストでのDPI宣言

概念間の関係(全21件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Windows Forms
デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。
DPI認識モード
アプリが「自分はどこまでDPIを扱えるか」をOSに申告する区分。Unaware・System Aware・Per-Monitor・Per-Monitor V2の4つを基本とする。
Unaware(DPI非対応)
DPI認識モードを何も宣言しない既定の状態で、アプリからは常に96 DPIに見える。
Per-Monitor(V1)
ウィンドウがあるモニターのDPIをトップレベルウィンドウへ通知するだけで、スケーリングは全部自前で処理する必要があるDPI認識モード。
Per-Monitor V2(PMv2)
子ウィンドウまでDPI変更が通知され、タイトルバーなど非クライアント領域はOSが自動でスケールするDPI認識モード。Windows 10 (1703)以降で利用できる。
AutoScaleMode
DPI認識モードとは別に、WinFormsのフォーム(ContainerControl)自身が持つ、デザイン時と実行時の環境差を吸収する自動スケーリング機構。
AutoScaleDimensions
デザイン時の環境での基準値(フォームのフォント寸法など)をDesigner.csに記録する、AutoScaleModeの基準値プロパティ。
exeプロパティの高DPI設定上書き
exeファイルのプロパティ「互換性」タブから、利用者側でそのアプリのDPIスケーリング動作を上書きできる設定。
Mixed-Mode DPI Scaling
Windows 10 1607以降、SetThreadDpiAwarenessContextによってトップレベルウィンドウ単位で異なるDPI認識モードを混在させられる仕組み。
app.configでのDPI宣言
.NET Framework 4.7以降のWinFormsで、app.configのSystem.Windows.Forms.ApplicationConfigurationSectionにDpiAwarenessキーを設定してDPI認識モードを宣言する方法。
System DPI Aware
サインイン時の主モニターのDPIに合わせて描画が固定されるDPI認識モード。主モニター以外や、サインイン後にDPIが変わった場合はOSが拡大表示する。WPFは宣言なしでこの状態になる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。