Windows7 解像度150%への対処
Windows7において解像度150%(=144dpi)にしたとき自作.Netアプリの表示が汚い件について Windows7における.Netアプリの高dpi対応を先日書きましたがその後いろいろ調べました。
結論はWindows7の設定で回避する方法とアプリの作り方で回避する2つあるということです。
まずWindows7の設定で回避する方法の前にコンパネの画面の設定内容を再確認してみました。
125%(120dpi)の場合は
となっているのに対し、150%(144dpi)の場合は
となっています。この2つの違いは「Windows XP形式のDPIスケーリングを利用する」にチェックが入っているかどうかということです。
このチェックが通常の.netアプリはどう認識する確認するソフトをちょっと作りました。Graphics.DpiXとWin32APIのGetDeviceCaps()を確認するツールです。
まず、ちぇっくが入っていないときの150%表示の時の結果です。
見ての通りシステム設定は144dpiなのにも関わらず、ソフト側は96dpiとして認識しています。内部の文字は残念な品質でシステム側で拡大表示されています。このウィンドウのサイズは400x400とアプリは認識しているのですが、実際は600x600のサイズです。これはシステム側が拡大表示しているためでしょう。
では「Windows XP形式のDPIスケーリングを利用する」にチェックを入れた場合の150%表示はどうなるかというと
ぼろぼろな表示ですが、アプリは140dpiで来ています。ウィンドウの大きさもぴったり400x400になっています。
ということできちんと高DPIに対応しているソフトだけを利用するのであれば「Windows XP形式のDPIスケーリングを利用する」にチェックを入れた方が幸せになれそうです。
ではPaint.Netのように「Windows XP形式のDPIスケーリングを利用する」にチェックが入っていなくてもきれいに表示するためにはどうすればよいかというとWindows7のプログラマ向けホワイトペーパ内の(タイトルおかしいですが、)
DPI 対応の Win32 アプリケーションを記述する(MSDN)
http://msdn.microsoft.com/ja-jp/windows/dd630126.aspx
このページの中の
DPI 対応であることを宣言する
http://msdn.microsoft.com/ja-jp/windows/dd630126.aspx#5a
を実行することで対応できることを確認しました。C#でマニフェストを埋め込む方法は以下のページを参考にしました。
マニフェストファイルを実行ファイルに埋め込む
http://dobon.net/vb/dotnet/control/xpstyle.html#section5
ちょっと面倒ですね。VisualStudio2010で改善されることを望みます。
| 固定リンク

コメント
www.lotro-gold.eu is selling lotro gold,cheap lotro gold
投稿: cheap lotro gold | 2009年10月23日 (金) 15時29分