ユーザーが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オペレーティングシステムと言語で動作する強固なものが必要です。
変数DPI設定を処理する正しい方法は、それらを検出してswitch
ステートメントでコントロールのサイズを手動で調整することではありません(最初の場合、サンプルif
ステートメントで示すものよりもはるかに多くの可能性があります)。
代わりに、フォームの AutoScaleMode
プロパティ をAutoScaleMode.Dpi
に設定し、フレームワークがこれを処理するようにしてください。
次のコードをフォームのコンストラクターに追加します(または設計時にこのプロパティを設定します)。
this.AutoScaleMode = AutoScaleMode.Dpi;
AutoScaleMode.Font
を使用することもできますが。自動スケーリングの詳細については、 MSDNドキュメント を参照してください。
C++/Win32ユーザーの場合は、良いリファレンスがあります: 高DPI Win32アプリケーションの作成 。
新しいバージョンのWindowsを使用している場合、グラフィックカードドライバーを再インストールすることをお勧めします(新しいバージョンをインストールするなど)。これで問題が解決することを願っています