FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2008年12月28日

DPI設定を変えてみた


WindowsのDPI設定の違いによるWindowsフォームアプリケーションの挙動を調べてみました。

素材は日本語版Vista上のVB2005で適当に作ったフォームで、320x240の固定サイズにしています。
デフォルトの96dpiで動かすとこんな感じ。
Original

これをVPC上の英語版XPで動かしてみます。おなじく96dpi。
AutoScaleMode=None 96dpi
まぁ、ほぼ同じイメージですが、日本語版Vistaと英語版XPではシステムフォントが異なるため、若干サイズが変化しています。
画面上部のFormSizeをみると、縦サイズが微妙に広がっています。

それでは、DPI設定を変えてみましょう。120dpi(1.25倍)にしてみます。
AutoScaleMode=None 120dpi
見事にレイアウトが崩れました。
コントロールのサイズはモノによって変わったり変らなかったりですが、フォントサイズがことごとく大きくなっているため、はみだしまくりです。
フォームデザイン時に何も考えずデフォルトのままビルドするとこのようになります。

この現象を回避するために使うのが.NET Framework 2.0から追加された「AutoScaleMode」というフォームのプロパティ。
デフォルトでは「Inherit (=None)」になっているので、まずはこれを「Dpi」に変更してみます。
AutoScaleMode=DPI 120dpi
フォントだけ大きくなるのではなく、DPI設定を大きくしたぶん、フォームやコントロールも大きく表示されるようになりました。
320x240 でデザインしたはずのフォームが 398x304 になっています。
フォームいっぱいのサイズで背景イメージなどを貼る場合はストレッチ設定にしておかないとまずそうです。
でもって、よくみると、左上のラベルのフォントが1文字欠けているようです。

AutoScaleModeプロパティを「Font」にしてみましょう。
AutoScaleMode=Font 120dpi
フォントサイズに応じてスケーリングされる、というMSDNリファレンスの説明通り、今度はラベルの文字も欠けていません。
フォームサイズはさらに大きくなって 425x322 になりました。

DPIを変えても画面解像度自体は変わらず、アプリケーションのサイズのみが変わりますので、業務アプリにありがちな「画面解像度に合わせてフォームサイズを決める」といった設計はDPIを変更した環境においては全く意味を成さないということになります。

中国語版WindowsXPでは、DPI設定を変えていないにもかかわらず、フォームサイズが巨大化したりする現象も見られるなど、このあたりの挙動はちょっぴり謎めいた部分もありそうですが、
今までおざなり、というか、ほとんど意識されてこなかったであろうDPI変更によるフォームレイアウトの変化。
業務アプリにおいても、ある程度DPIを意識したデザイン、実装が必要なのかもしれません。

参考) MSDN - ContainerControl.AutoScaleMode プロパティ

[ posted by ken ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/403-63dfcfbc
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。