[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」を開く。

下記のように

の「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」に対応する必要がある。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…
  2. 画面のパラメータにより異なる検索条件や、異なるテーブルのデータを取得する際。 「UNION ALL…
  3. いまの時代、一つの企業に就職してそこで定年を迎えるというのはまれです。 しかし、それが一番いいと私…
  4. dpiAwareの設定を変える。 (さらに…)…
  5. ビューの定義を検索して、ビューで参照しているテーブルまたはビューを探す (さらに……

カテゴリー

[スポンサードリンク]




ページ上部へ戻る