« 公共事業を止めるだけではだめ | トップページ | ロジクールマウス M705購入+レビュー »

Windows7 解像度150%への対処

Windows7において解像度150%(=144dpi)にしたとき自作.Netアプリの表示が汚い件について Windows7における.Netアプリの高dpi対応を先日書きましたがその後いろいろ調べました。

結論はWindows7の設定で回避する方法とアプリの作り方で回避する2つあるということです。

まずWindows7の設定で回避する方法の前にコンパネの画面の設定内容を再確認してみました。

125%(120dpi)の場合は

dpi-setting120

となっているのに対し、150%(144dpi)の場合は

dpi-setting150

となっています。この2つの違いは「Windows XP形式のDPIスケーリングを利用する」にチェックが入っているかどうかということです。

このチェックが通常の.netアプリはどう認識する確認するソフトをちょっと作りました。Graphics.DpiXとWin32APIのGetDeviceCaps()を確認するツールです。

まず、ちぇっくが入っていないときの150%表示の時の結果です。

150dpi

見ての通りシステム設定は144dpiなのにも関わらず、ソフト側は96dpiとして認識しています。内部の文字は残念な品質でシステム側で拡大表示されています。このウィンドウのサイズは400x400とアプリは認識しているのですが、実際は600x600のサイズです。これはシステム側が拡大表示しているためでしょう。

では「Windows XP形式のDPIスケーリングを利用する」にチェックを入れた場合の150%表示はどうなるかというと

150-success

ぼろぼろな表示ですが、アプリは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で改善されることを望みます。

|

« 公共事業を止めるだけではだめ | トップページ | ロジクールマウス M705購入+レビュー »

ソフトウェア・開発」カテゴリの記事

コメント

www.lotro-gold.eu is selling lotro gold,cheap lotro gold

投稿: cheap lotro gold | 2009年10月23日 (金) 15時29分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2371/46330078

この記事へのトラックバック一覧です: Windows7 解像度150%への対処:

« 公共事業を止めるだけではだめ | トップページ | ロジクールマウス M705購入+レビュー »