2012-02-21 2 views
37

ユーザーが125%または150%を選択するまで完全に動作するアプリケーションを作成しました。それは私のアプリケーションを壊すだろう。私は後で、DPIを検出することによってフォントサイズを見つける方法を見つけました。ウィンドウのフォントサイズを検出する(100%、125%、150%)

これは、中国語版のWindows 7を使用している人が自分のアプリケーションを使用するまで有効でした。アプリケーション全体が中国語のウィンドウ7で壊れてしまいます。中国語の文字は私のアプリケーションを壊す奇妙なDPIを引き起こしています(私は実際にテストすることはできません。英語版しかインストールできません。

私の現在のコードは次のように動作します。素晴らしい作品のWindows 7の英語バージョンで

if (dpi.DpiX == 120) //For 125% fonts 
{ 
    //Resize form and set default font to correct problems 
} 
else if (dpi.DpiX == 96) //For 100 and 150% fonts 
{ 
    //Resize form and set default font to correct problems 
} 

を、何とか中国のバージョンは、この右スキップし、フォームも表示されないコントロールで、自分自身を破壊し、フォントが非常に大きく、問題を過ぎて押し込むと、画像ボックスが移動します。

APIを検出せずにWindowsのフォントスケール(100%、125%、150%)を検出するにはどうすればよいでしょうか?私はすべてのWindows 7のオペレーティングシステムと言語で動作するようなものが必要です。

+0

私は本当に速く入力していましたが、いくつかのスペルミスを犯しました。私は「API」ではなく「DPI」と言っていました。申し訳ありません –

+0

あなたの説明は、ビデオドライバやインストールされているフォントの問題に似ています... – Yahia

+0

ちょっとしたこと:中国のクライアントのセリ家がいるなら、少なくともVirtualMachineを作成するには時間を費やす価値があります'VirtualBox'や' VmWare'を使うことで、可能な限り実際のOSと最も近いフェデリティでアプリケーションをテストすることができます。 – Tigran

答えて

16

可変DPI設定を処理する正しい方法は、それらを検出せずにswitchステートメントで手動でコントロールのサイズを調整することではありません(サンプルifステートメントに表示されるものよりはるかに可能性があります)。

代わりに、フォームのAutoScaleMode propertyAutoScaleMode.Dpiに設定し、フレームワークでこれを処理する必要があります。

は、フォームのコンストラクタに以下のコードを追加します(またはデザイン時にこのプロパティを設定):

this.AutoScaleMode = AutoScaleMode.Dpi; 

あなたがAutoScaleMode.Fontを使用することを好むかもしれませんが。自動スケーリングの詳細については、the MSDN documentationを参照してください。

+1

私はそれをやろうとしましたが、問題は私のアプリケーションがそれを駄目にすることです。 –

+1

@user "messes up"はどういう意味ですか?何が間違っていますか?どのようにデバッグしようとしましたか?コンテナに配置し、 'Anchor'と' Dock'プロパティを設定するなど、コントロールの相対的な配置を使いますか?ユーザーがデフォルトのフォント/サイズを変更しても、絶対配置は決して機能しません.DPIが関与するときは、はるかに少なくなります。 –

+8

AutoScaleMode.noneを使用して私の問題を解決しました! –

5

C++/Win32ユーザーの場合は、ここに参考にしてください:Writing High-DPI Win32 Applications

+0

参考資料の別のビットです http://technet.microsoft.com/en-us/library/dn528846.aspx –

関連する問題