高解像度の画面を備えたコンピューターの場合、通常はスケーリング率を設定します。たとえば、私の開発用コンピューターには 4K 画面があり、スケーリング率は 150%、つまりディスプレイの 1 インチあたりのドット数 DPI が 144 に設定されています。 Windows の表示効果は最高です。低解像度画面の場合、通常のズーム率は 100%、つまり、1 インチあたりの表示ドット数の DPI は 96 です。
winforms ソフトウェアのウィンドウレイアウトは、特別な処理をせずに高解像度の画面で設計していますが、将来的に低解像度の画面のコンピュータで実行すると、ウィンドウのレイアウトとテキストの表示がずれる可能性があります。 2つの方法
:
- ソフトウェアを dpi 対応にするこの方法では、ウィンドウ サイズ/レイアウト/コントロール サイズ/フォント サイズなど、多くの状況を考慮する必要があり、完璧な開発のコストは非常に高くなります。開発マシンよりも高い DPI を使用しても、表示効果は依然として非常に優れています。
- ソフトウェアは dpiAware を有効にしません。VS のウィンドウ デザイナーはズーム モードを有効にせず、ソフトウェアは同時に dpiAware を有効にしません。将来低解像度の画面で実行する場合、フォーム/コントロールのサイズとフォントはサイズは設計当時のままです。
最初の方法を採用したい場合は、この記事の参考資料に従って練習してください。ここでは 2 番目の方法を使用します。主なポイントは次のとおりです。
Visual Studioでオートスケーリングを無効にする
コマンド ライン動作を開始するとdevenv.exe /noscale
、UI デザインにスケーリング効果がなく、将来的に低解像度の画面で実行されるときと同じサイズになります。欠点は、VS のフォントがこのモードでは、Visual Studio は常に、現在
Zoom モードが無効であること、通知を開くかどうかを確認するメッセージを表示します。次の設定を通じて通知プロンプトをオフにすることができます。
[ツール] > [オプション] を選択して、[オプション] ダイアログ ボックスを開きます。[オプション] ダイアログ ボックスで、[Windows フォーム デザイナー] > [全般] を選択し、[DPI スケーリング通知] を [False] に設定します。
app.manifest ファイルをプロジェクトに追加します
dpiAware を false に設定し、dpiAware を無効にします。
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
app.cnfig ファイルを編集する
EnableWindowsFormsHighDpiAutoResizing を false に設定すると、dpiAware が無効になっていてもフォームの位置が変更されます。
<!-- DpiAwareness 设置为效果更好的 PerMonitorV2 模式 -->
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</appSettings>
dpiAware の詳細情報
- Telerik メーカーの説明書https://www.telerik.com/blogs/winforms-scaling-at-large-dpi-settings-is-it-even-possible-
- Devexpress ベンダーのノート <> https://docs.devexpress.com/WindowsForms/116666/common-features/high-dpi-support >
- SOUI コンポーネントの説明https://www.cnblogs.com/setoutsoft/p/16425917.html