タイトル : Re^2: dpiについて 投稿日 : 2012/03/17(Sat) 21:21 投稿者 : 魔界の仮面弁士
元質問者の投稿に対してではなく、あえてこの位置に繋いでみます。 > あまり関わりたくない質問内容ですが、どなたからもレスが無いので。 …関わってはみたいのですが、追跡調査が必要な質問となると、 この時期は回答する余裕が無かったりします。かといって あまり古くなると、掲示板システムの都合上、レスできなくなるという罠。 > (解像度が同じと言ってもそのモニタの本来の解像度なのか選択された解像度なのか?) 例えば 1600x900 対応の 13.1 インチ液晶を積んだノートパソコンの場合、 最大解像度は 140dpi に相当しますね。 → (√(1600^2+900^2))÷13.1 ≒ 140.1 dpi この場合、OS 設定が 96dpi では文字が細かすぎるため、最近はメーカー側で 120dpi(あるいは 144dpi)に設定した状態で出荷されることも珍しくありません。 あるいは、dpi 設定は変更せず、画面解像度を変更しているケースもあるでしょう。 たとえば、1600x1200 用のモニタ一杯に 1024x768 の画面を出力させると、 文字サイズは見た目上、約1.5倍の大きさで表示されます。(ただし表示はぼやけます) かつては、96dpi でないと使い物にならないソフトが数多くあったので、 あえて解像度を下げるという対応が採られることもありましたが、現在は OS の dpi 設定で対応するケースが増えてきているように感じます。 ――閑話休題。 > 例えば、私の環境での計測ですが 調査するなら Size だけではなく、ClientSize や FormBorderStyle も おさえておいた方が良いかと思います。 たとえば、手元の Win7 x64 環境で SystemInformation を拾うと [プロパティ] [96dpi] [120dpi] -------------------- ---------- ---------- CaptionHeight 22 27 FixedFrameBorderSize 横=3,縦=3 横=3,縦=3 FrameBorderSize 横=8,縦=8 横=9,縦=9 となっていました。 そして、Size と ClientSize の関係というのは、FormBorderStyle の設定に応じて 【None】 Size.Width = ClientSize.Width Size.Height = ClientSize.Height 【Sizable】 Size.Width = ClientSize.Width + (2 * FrameBorderSize.Width) Size.Height = ClientSize.Height + (2 * FrameBorderSize.Height) + CaptionHeight 【FixedSingle】 Size.Width = ClientSize.Width + (2 * FixedFrameBorderSize.Width) Size.Height = ClientSize.Height + (2 * FixedFrameBorderSize.Height) + CaptionHeight の関係が成り立ちます。 上下左右の枠線幅とタイトルバーの高さ分が加わるということです。 > 96dpi 120dpi > NONE 400 × 400 402 × 407 上記は FormBorderStyle = Sizable の場合でしょうか。 もしそうなら、SystemInformation の値が私の環境と同じだとすれば、 Size と ClientSize の間には、 横方向には 8+8 (96dpi) または 9+9 (120dpi) 縦方向には 8+8+22 (96dpi) または 9+9+27 (120dpi) の差が生まれていたであろうと予測されます。 そうすると 上記の AutoScaleMode = None でテストしたときのクライアント領域は、 96dpi 120dpi Size 400 × 400 402 × 407 ClientSize 384 × 362 384 × 362 であったという事になりますよね。 見ての通り、96dpi と 120dpi とで、クライアント領域に変化がありません。 これが AutoScaleMode = None の場合の動作です。 次に、Dpi モードの場合を見てみましょう。 > 96dpi 120dpi > DPI 400 × 400 498 × 498 こちらも実際に試してはいませんが、先と同様に算出すると、 96dpi 120dpi Size 400 × 400 498 × 498 ClientSize 384 × 362 480 × 453 というクライアント領域であったと予想されます。 384 × 362 の 1.25 倍は 480.0 × 452.5 ですから、計算値とも一致しますね。 |