これからのWindowsフォームアプリやWPFアプリは高DPIに対応したアプリケーションを作成する必要があるようです。プログラマなのに知りませんでした (´;ω;`)ウゥゥ。さすがのヘッポコぶりです。
このまま知らないままで済めばよかったのですが、知ってしまった以上、知識としては残しておきたいと思います。
スポンサーリンク
マニフェストファイルを使用する
フォームアプリでは、マニフェストファイルを追加して高DPIアプリであることを宣言する必要があるようです。詳細なマニフェストファイルの追加方法については下記のリンクを参照ください。
一部抜粋:
Not DPI Aware 高DPIに対応していないアプリケーション System DPI Aware 高DPIに対応しているアプリケーション。ただし、モニターごとのDPIには対応していません。 Per monitor DPI Aware Windows 8.1でサポートされたモニターごとのDPIの設定にも対応しています。(Windowsストアアプリ) マニフェストファイルの記述例:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> ← Per monitor DPI Aware 時は 'per monitor' と記述する </asmv3:windowsSettings> </asmv3:application> </assembly>
dpiAware に true を指定したときは、下記の「テキスト、アプリ、その他の項目のサイズを変更する」でサイズを変更すると、アプリケーションも自動で拡大・縮小します。また、マニフェストファイルなしで作成したアプリではレイアウトの崩れや文字のぼやけが発生することがありますが、これらも解消されることが多いと思います。
なお、dpiAware に per monitor を設定した場合には、上記設定からサイズを変更してもアプリのサイズは変わりません。自分でDPIスケールによってフォームやテキストなどの大きさを変更させる必要があります。
ただし、文字のぼやけなどは解消されると思いますので、画面サイズによるアプリの大きさの変更は返って煩わしい(余計なお世話)という方は、per monitor を選択して、サイズが変更されても何もしないアプリケーションを作成すれば良いと思います。
なお、WPFアプリに関してはデフォルトで高DPIアプリとのことです。特に何か操作が必要ということはないようです。
フォームに貼り付けているイメージ
注意:この部分は、予想になります。未確認です。
PictureBoxなどに貼り付けて使用している画像などもDPIによって最適なサイズがあるはずです。フォームが拡大したら画像もそれにあわせて拡大されると思います。小さいサイズの画像の場合は、拡大されてぼやけると思われます。
DPIごとにサイズ違いの画像を用意する必要が本来あるのかもしれませんが、大きめの画像を用意し、通常はその画像を縮小して表示すればよいのではないかと思っています。
非高DPIアプリを対応アプリに変更する
古いアプリなどで高DPIアプリ対応していないアプリもたくさんあるとおもいますが、実行ファイルのプロパティを開き、互換性タブを下記のように変更すること高DPI対応アプリとして動作させることができるようになるようです。
選択肢はアプリケーション、システム、システム(拡張)の3つがありますが、どれがよいかはアプリ次第のようです。試してみてもっとも良いと思うものを選択するようにしましょう。