- Home
- C#, VB.NET, Visual Studio
- [C#][VB.NET]Windows Formアプリケーションで表示がぼやけるのを防ぐ
[C#][VB.NET]Windows Formアプリケーションで表示がぼやけるのを防ぐ
dpiAwareの設定を変える。
現象
Visual Studioでフォームアプリケーションを作成すると、Windows10で、画面の表示がぼやける。
例えば、このような画面を定義する。
この画面を実行すると、下図のような表示になる。
カレンダーコントロールがぼやけている気がする。
この画面のぼやける現象を設定にて修正する。
高DPI設定の種類
高DPIに対応していないと、
・Not DPI Aware : 高DPIに対応していないアプリケーション
・System DPI Aware : 高DPIに対応しているアプリケーション
※モニターごとのDPIには対応していない。
※デュアルモニターやマルチモニターなどは対応していない。
・Per monitor DPI Aware : モニターごとのDPIの設定に対応(Windows 8.1以降)
各テンプレートのデフォルトの設定は下記の通り。
Windowsフォーム : Not DPI Aware
WPF : System DPI Aware
MFC : System DPI Aware
Windowsストアアプリ : Per Monitor DPI Aware
このことから、Windowsフォームアプリは絶対に対策をしなければならない。
対策
「アプリケーションマニフェスト」の作成
1.ソリューションエクスプローラーのプロジェクトを右クリック
2.「追加」→「新しい項目」を選択
3.「アプリケーションマニフェストファイル」を選択して「追加」
※下の方にスクロールすると見つかる。
4.ソリューションエクスプローラーに追加されるので開く
5.大文字で「DPI」を検索して該当の修正箇所を探す。
※赤枠で囲んだコメントを外す。
設定が「true」の場合
設定が「true」の場合は、「System DPI Aware」として動作する。
アプリケーションマニフェストはデフォルトで「true」になった状態でコメント化されている。
メインモニター(ノートPC)では、ぼやけるのがなおっている。
しかし、デュアルモニターで、外部モニターに表示すると、ぼやけている。
この場合、「Per Monitor DPI Aware」に設定する必要がある。
設定を「Per Monitor DPI Aware」にする
アプリケーションマニフェストファイル「app.manifest」を開く。
下記のように
1 |
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">per monitor</dpiAware> |
の「dpiAware」の設定を「true」から「per monitor」に設定する。
そうすると。
メインモニターでも。
サブモニターでも。
画面がぼやけないアプリケーションを作ることができる。
VB.NETとC++
VB.NETも同じ手順で、アプリケーションマニフェストを作ることができた。
ただ「C++」はどこを探しても、アプリケーションマニフェストは見つからないため、ないんじゃないかと思う。
「System DPI Aware」の問題点
Visual Studio のソーシャルサイト
dpiAware=Trueを設定したときに表示にゴミが出る
にあるように、環境によっては、「System DPI Aware」で縦縞、横縞が出るようだ。
このサイトの対応策にあるように、フォームのResizeイベントの冒頭に「Invalidate();」を記述するか、「Per Monitor DPI Aware」に対応する必要がある。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。