web-dev-qa-db-ja.com

Windowsフォントサイズの検出(100%、125%、および150%)

ユーザーが125%または150%を選択するまで完全に機能するアプリケーションを作成しました。それは私のアプリケーションを壊すでしょう。後で、DPIを検出してフォントサイズを見つける方法を見つけました。

これは、Windows 7の中国語版を持っている人が私のアプリケーションを使い始めるまで、うまくいきました。中国語の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
}

うまく動作する英語版のWindows great7では、どういうわけか中国語版がこれですぐにスキップし、フォームが表示されない、コントロールが非常に大きく、フォントが非常に大きく、画像ボックスが移動するなど、フォーム自体が破壊されます。

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

40
Landin Martens

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

代わりに、フォームの AutoScaleModeプロパティAutoScaleMode.Dpiに設定し、フレームワークがこれを処理するようにしてください。

次のコードをフォームのコンストラクターに追加します(または設計時にこのプロパティを設定します)。

this.AutoScaleMode = AutoScaleMode.Dpi;

AutoScaleMode.Fontを使用することもできますが。自動スケーリングの詳細については、 MSDNドキュメント を参照してください。

18
Cody Gray

C++/Win32ユーザーの場合は、良いリファレンスがあります: 高DPI Win32アプリケーションの作成

5
nspire

新しいバージョンのWindowsを使用している場合、グラフィックカードドライバーを再インストールすることをお勧めします(新しいバージョンをインストールするなど)。これで問題が解決することを願っています

0
user11581995