2011-11-03 10 views
5

既存のWin32 MFCベースアプリケーションのいずれかに問題があります。高dpi設定を使用するディスプレイでは正しく表示されません。具体的には、120 dpiを選択したWindows XPでは、テキストが拡大され、コンテナ(テキストがボタンの境界をオーバーフローするなど)がないアプリ内の場所がいくつかあります。 96 dpiが選択され、「XPスタイルのdpiスケーリングを使用する」が選択されている場合、これはWindows 7(およびVista)でも発生します。 XPスタイルのスケーリングが選択されていない場合、Win7はDPI仮想化を代わりに使用することを理解しています。 DPI仮想化を使用すると、すべてうまく見えます(奇妙ですが、少なくとも正しいです)。 Win7ではデフォルトで120 dpiはxpスタイルのスケーリングを使用し、次の設定(144 dpi)では使用しません。だから我々のアプリは144 dpiで正しく見えるが、120 dpiで間違っている。Windowsアプリケーション - DPIの問題

アプリケーションを「DPI対応」と宣言するようにアプリケーションマニフェストを編集すると、これはDPI仮想化(XPスタイルのdpiスケーリングではなく)に変わります。物事はまだ本当に悪く見える(120 dpiでは変更なし、144 dpiは現在壊れている)。

私はこの問題を解決する必要があります。私は一般的にDPI /スケーリングの問題を読み解いてみましたが、学習経験があります。これまで私は適切な解決策を見つけていませんでした。現時点では、私は現在、徹底的かつ正確な修正を行うつもりはない(アプリケーションは、dpiに従ってすべての要素を正確に拡大する)。それにはたくさんの書き換えが必要です。私は本当に2つの可能な解決策があると思う。 1つはDPIスケーリングのすべての種類を一括してオフにします。これは、ユーザーのWin7システムが120 dpiに設定されていれば、システム上のすべてのものは良く見えるが、私たちのアプリケーションは正しく見えるが、他のアプリケーションの他のすべてのものと比べると小さいだろう。 2つ目の解決方法は、DPI仮想化を使用してXPスタイルのdpiスケーリングを使用しないようにする方法です。これをアプリケーション側の変更にして、エンドユーザーがWindowsの構成を変更する必要がないようにします。

これまでのところ、いずれの解決策も達成する方法が見つかりませんでした。

このテーマに関する知識が豊富な方は、回答して正しい方法で私を指摘できますか?

おかげ

+1

レイアウトコードまたは図面コードに問題はありますか?たとえば、ボタンやその他の標準コントロールをxピクセル単位で作成する問題、または固定サイズの独自のコントロール(GDI呼び出しなど)を描画するコードがあるという問題がありますか?あなたのレイアウトはどうやっていますか?フォーム?ダイアログテンプレート?カスタムコード? –

+0

ここには魔法はありません。窓を大きくする必要があります。またはあなたのフォントが小さくて、あなたの毒を選んでください。 –

答えて

2

あなたは120のDPI設定にDPI仮想化を強制することはできません。私は高いDPIであいまいな外観を持つことが良いトレードオフのように思えたので、私自身がこれを調べました。

高いDPI設定でフォントのスケーリングを適切に調整するために、UIの配置とスケーリングを完全に書き直しました。クライアントはDPIを完全に認識し、DPIの設定に応じて適切に拡大/縮小されます。

これを正しく行うための作業は、かなり複雑なクライアントの場合は1人〜3ヶ月かかりました。

私たちは決して試したことがない二次計画を持っていましたが、それはあなたのために働くかもしれません: 起動時にOSのDPIスケーリング係数を読んでください。次に、Windowsがフォントを再度スケールアップするときに、UIがそれらのフォントに適合できるサイズに戻るように、この要素によってすべてのフォントインスタンスを減らします。もちろん、DPI設定の高いユーザーはアプリケーションでフォントが大きくならず、少なくとも使用可能になります。

関連する問題