Windows フォームでなぜか文字がぼける時(High DPI)
なぜか文字がぼける
高解像度(1920 x 1080以上?)のディスプレイでWindowsフォームアプリを実行すると、
このように文字がぼけることがあります。
ちょっと分かりづらいかもしれませんので、下のVisual Studio でのデザイン時の画像と比較してみてください。
違いが分かるでしょうか?
上の画像のフォームは文字がぼやっとしています。
どうしてこのような表示になってしまうかと言うと、Windows フォームが高DPI(High DPI)に対応できていないのが原因です。
Windowsフォームは高DPIには対応せず、一部のコントロールのみ高DPIに対応しています。
アプリの高DPI(High DPI)対応について 第1回 ~ 高DPIとは ~ - 田中達彦のブログ - Site Home - MSDN Blogs
高DPIに対応していないアプリの場合は、DPIの拡大率に応じてOS側が自動的にアプリを拡大して表示させます。
そのため、このWindowsフォームのようにUI要素がぼやけてしまうことがあります。
Windows FormにおけるHigh DPI には、コントロールの文字がぼけるだけでなく、クリップボードにコピーした画像を PictureBox に表示すると何故か拡大されてしまう、という問題*1もあります。
解消方法
プロジェクトにアプリケーション・マニフェストファイルを追加します。*2
app.manifest
<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> </asmv3:windowsSettings> </asmv3:application> </assembly>
こうすると、
きれいに表示されるようになりました。
先ほど書いた画像の拡大問題も発生しなくなります。