3

Windows Vista で VS2008 を使用して Windows フォーム アプリケーションを開発しています。先日、Windows XP でアプリケーションを実行しようとしましたが、GUI のすべてが台無しになりました。Windows Vista で 120 Dpi 設定を使用してアプリケーションを開発し、XP が 96 dpi に設定されていることに気付きました。

私のアプリケーションにはいくつかの UserControls があり、DPI を 96 に変更すると、Visual Studio 自体でもすべてが縮小します。最近、多くの人が高 DPI で Visual Studio を使用していると確信しています。では、Visual Studio とランタイムの両方で GUI が台無しにならないようにするにはどうすればよいでしょうか?

編集: この問題に関するいくつかの記事を読み、AutoScaleMode を None に設定する必要があることを知りました。ただし、これでも、オペレーティング システムによって適用される新しい DPI 設定をラベルに適応させることはできます。他の GUI 要素には固定サイズがあるため、ラベルの拡大/縮小を防ぐ方法が必要です。

4

2 に答える 2

0

これはかなり古い質問ですが、私の解決策/意見を共有したいと思います。最近、同様の問題に遭遇しました。実際には、Visual Studio で WinForms をそのままにしておきたいのですが、実行時にスケーリングする必要があります。それを正しく行う方法についての一貫した要約は見つかりませんでした。いくつかの読書と実験の後、私はこの解決策にたどり着きました:

  • フォームのAutoScaleMode = Font.
  • フォーム デザイナーで設定します。Font = MS Sans; 11px
  • Forms Ctor で、 の後に次InitializeComponentのように設定します。Font = SystemFonts.DefaultFont
  • マニフェストまたは API 関数を使用して DPI 対応を有効にするSetProcessDPIAwareness

AutoScaleMode がアクティブなままであるため、モニターごとの DPI 認識であっても、すべての DPI 変更マジックが機能します。残っているのは、スケーリングが適切に機能するようにフォームを設計することです。

詳細はブログに書きました: http://www.sgrottel.de/?p=1581&lang=en

于 2016-12-21T10:59:15.387 に答える
0

この問題に取り組んでからしばらく経ちましたが、AutoSize = False に設定してみてください。さらに、 UseCompatibleTextRendering = True が役立つ場合があります。

于 2011-11-02T05:10:05.563 に答える