Windows Formアプリでの高 DPI サポート
Windowsでディスプレイの表示を拡大したとき、Formアプリでは文字表示などがボケてしまう。また、アプリ操作中にウインドウが拡大されなくなることも発生した。
Windows Formアプリでの高 DPI サポートを有効にすることで文字がくっきり表示され、ウインドウサイズが縮まる現象も回避できる。
ただし、UI部品によってフォントが拡大されないもがあり、またアイコンの中の画像も拡大されない。若干UIレイアウトの乱れも発生する。
以下、Microsoftのサポートページから必要最小限の部分だけまとめたもの。
https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/high-dpi-support-in-windows-forms
サポート対象:
.NET Framework 4.7 以降、Windows Form
Windows 10 Creators Update 以降の Windows で有効
Windows 10 との互換性を宣言
プロジェクトにapp.manifestを追加する。
ソリューションエクスプローラでプロジェクトを右クリック
⇒ 追加 ⇒ 新しい項目⇒「マニフェスト」で検索
⇒「アプリケーション マニフェスト ファイル(Windows のみ)」を選択
app.manifest の compatibilityの中のWindows 10のコメントを外す。
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
トリッキーポイント
ディスプレイのDPIに合わせてきれいに描画したい場合はこの宣言を有効にする。
ディスプレイ拡大率に応じてFormアプリを拡大させたい場合は、敢えてこの宣言をコメントアウトする。
宣言が有効だとWindows 10以降対応のアプリとして扱われるため、Formアプリでは期待した動作にならないことがある。
app.config ファイルでモニターごとの DPI 認識を有効にする
app.config の configuration の最後に DpiAwareness を追加する。
<configuration>
<!-- ... other xml settings ... -->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
</configuration>
Probram.csでEnableVisualStyles を呼ぶ
Mainをstaticにし、Runの前に二行追加する。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form2());
}
EnableVisualStyles
Formアプリの外観を、OSのテーマに合わせたデザインにするためのメソッド
SetCompatibleTextRenderingDefault
Formアプリ全体のテキスト描画エンジンを設定するためのメソッド
パラメータ
false = TextRenderer.DrawText を使った描画
Formのプロパティー AutoScaleMode変更
対象のFormのAutoScaleModeをFontからDpiに変更。
これも、アプリの拡大のためにはFontのままにした方がよい場合があるかもしれない。
DataGridViewのプロパティー AutoSizeColumnsMode変更
Fillに設定。アプリ拡大時にカラム幅を広げる。
DataGridViewのプロパティー AutoSizeRowsMode変更
DisplayedCellsまたはAllCellsExceptHeadersに設定。アプリ拡大時に文字表示に合わせてRowを広げる。開発時/デバッグ時の注意事項
フォームのデザインは必ず 100%(96 DPI) のディスプレイ環境で行う。
異なるDPI環境でデザイナーを開くと AutoScaleDimensions が書き換わり、レイアウトやコントロールのサイズが崩れる原因になる。
レイアウトが崩れると復旧が面倒なので、プロジェクトのバックアップを忘れずに!
0 件のコメント:
コメントを投稿