知識マップ: 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%で開くことである。
flowchart LR
accTitle: WinFormsの高DPI対応の知識マップ
accDescr: WinFormsアプリのDPI認識モード(Unaware・System Aware・Per-Monitor V1/V2・GDIスケーリング)がDPI仮想化やAutoScaleMode、デザイナーの高DPI事故、世代別の設定方法とどう結び付くかを示す図。
windows_forms["Windows Forms"]
dpi_awareness_mode["DPI認識モード"]
dpi_unaware_mode["Unaware(DPI非対応)"]
system_dpi_aware["System DPI Aware"]
per_monitor_v1["Per-Monitor(V1)"]
per_monitor_v2["Per-Monitor V2(PMv2)"]
gdi_scaling["GDIスケーリング"]
dpi_virtualization["DPI仮想化"]
devicedpi_scaling["DeviceDpi基準の自前描画スケーリング"]
autoscale_mode["AutoScaleMode"]
autoscale_dimensions["AutoScaleDimensions"]
designer_high_dpi_corruption["デザイナーの高DPI事故"]
exe_dpi_override_setting["exeプロパティの高DPI設定上書き"]
mixed_mode_dpi_scaling["Mixed-Mode DPI Scaling"]
dotnet_high_dpi_setting[".NETの高DPI設定(ApplicationHighDpiMode/SetHighDpiMode)"]
dpi_appconfig_declaration["app.configでのDPI宣言"]
dpi_manifest_declaration["マニフェストでのDPI宣言"]
windows_forms -->|"前提とする"| dpi_awareness_mode
dpi_awareness_mode -->|"利用する"| dpi_unaware_mode
dpi_awareness_mode -->|"利用する"| system_dpi_aware
dpi_awareness_mode -->|"利用する"| per_monitor_v1
dpi_awareness_mode -->|"利用する"| per_monitor_v2
dpi_awareness_mode -->|"利用する"| gdi_scaling
dpi_unaware_mode -->|"原因になり得る"| dpi_virtualization
per_monitor_v1 -->|"用いるのは非推奨"| windows_forms
per_monitor_v2 -.->|"前提とする"| devicedpi_scaling
windows_forms -->|"利用する"| autoscale_mode
autoscale_mode -->|"利用する"| autoscale_dimensions
autoscale_dimensions -.->|"原因になり得る"| designer_high_dpi_corruption
exe_dpi_override_setting -.->|"利用する"| gdi_scaling
exe_dpi_override_setting -.->|"利用する"| dpi_virtualization
mixed_mode_dpi_scaling -.->|"利用する"| per_monitor_v2
windows_forms -.->|"利用する"| dotnet_high_dpi_setting
dpi_appconfig_declaration -->|"用いるのは非推奨"| dpi_manifest_declaration
windows_forms -.->|"利用する"| dpi_manifest_declaration
windows_forms -.->|"利用する"| dpi_appconfig_declaration
system_dpi_aware -.->|"より先に行うべき"| per_monitor_v2
system_dpi_aware -.->|"前提とする"| autoscale_mode
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Windows FormsはDPI認識モードを前提とします。
- DPI認識モードはUnaware(DPI非対応)を利用します。
- DPI認識モードはSystem DPI Awareを利用します。
- DPI認識モードはPer-Monitor(V1)を利用します。
- DPI認識モードはPer-Monitor V2(PMv2)を利用します。
- DPI認識モードはGDIスケーリングを利用します。
- Unaware(DPI非対応)はDPI仮想化の原因になることがあります。
- Per-Monitor(V1)をWindows Formsに用いることは推奨されません。
- Per-Monitor V2(PMv2)はDeviceDpi基準の自前描画スケーリングを前提とします。
- Windows FormsはAutoScaleModeを利用します。
- AutoScaleModeはAutoScaleDimensionsを利用します。
- AutoScaleDimensionsはデザイナーの高DPI事故の原因になることがあります。
- exeプロパティの高DPI設定上書きはGDIスケーリングを利用します。
- exeプロパティの高DPI設定上書きはDPI仮想化を利用します。
- Mixed-Mode DPI ScalingはPer-Monitor V2(PMv2)を利用します。
- Windows Formsは.NETの高DPI設定(ApplicationHighDpiMode/SetHighDpiMode)を利用します。
- app.configでのDPI宣言をマニフェストでのDPI宣言に用いることは推奨されません。
- Windows FormsはマニフェストでのDPI宣言を利用します。
- Windows Formsはapp.configでのDPI宣言を利用します。
- System DPI AwareはPer-Monitor V2(PMv2)より先に行うべきです。
- System DPI AwareはAutoScaleModeを前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。