Windows7における.Netアプリの高dpi対応
Windows7で期待していることの1つに高dpiでもデザイン崩れなく表示できること。
WindowsXPでは96dpi以外はちょっと使う気になれなかったし、Vistaもアイコンなどつぶれまくりで残念なところがあった。
Windows7になってやっと120dpiが使えそうな感じ。さらに150%というのもありちょっと期待していました。
(ちなみに右の画面を表示するには「コンパネ」もしくは「デスクトップを右クリック」→「画面の解像度」→「テキストやその他の項目の大きさの変更」)
私の親もだいぶ老眼になってきましたが最近の高解像度の液晶で96dpiは完全に無理、150%や200%で正常に動作することをとても期待しています。(正しい使い方ではないと思いますが)
ところが自作アプリのWindows7上での高dpi動作検証をやっていて理解しがたい動きをしていたのでちょっと書いてみます。
.Netアプリは普通に作れば高dpiにも.Net側で対応してくれるようになっているはずだという先入観がまずある。(参考:Windows フォームにおける自動スケーリング MSDN)
まず125%(120dpi)まではスケーリングが正しく動作していることは確認。私のディスプレイは1600x1200だがきちんと1600x1200として認識している。メニューやその他のフォントもきれいだ。
ところが150%や200%(カスタム設定)をするとおかしな事になる。
たとえば150%のときはこんな感じ。エクスプローラ側はきれいにフォントがスケーリングされているが.Netアプリ側は単純拡大状態になっている。
もう1つ。200%にしたときのCSTimerの画面。タイトルバーの文字はきれいだが内部のボタンの文字描写は拡大常時されているのが分かる。液晶文字はBitmapなのでしょうがないとして。
拙作の定規という画面のドット数をはかるだけのソフトを実行すると画面サイズは1066x800、つまり150%されたドット数に見えている。120dpiの時に定規で画面サイズを測ると元のサイズ(1600x1200)である。ちなみにこれらのソフトはAutoScaleMode = AutoScaleMode.Fontで作成されている。
私が作ったアプリだけかと一瞬焦ったがいくつかあるフリーソフトを試してみても同様だった。
ところがPaint.Netはちゃんとスケーリングされているように見える・・・このそふとはToolStrip、MenuStripを使っていないように見えるのでそのせいかもしれない。もしくはAutoScaleModeがDPIなのか?
ちょっと謎が多くてもう少し探ってみたいと思います。知っている方教えて!
参考URL:
- High DPIについてのさらなるフォローアップ
結局プログラマーが頑張れと言うことか?? - Engineering Windows 7
みんなせっかくの高解像度をそのまま使わないみたいですね。
| 固定リンク

コメント