ホームページ >バックエンド開発 >C++ >なぜ私のdpi-unawareアプリケーションが突然DPIシステムを認識したのですか?

なぜ私のdpi-unawareアプリケーションが突然DPIシステムを認識したのですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-28 09:16:09241ブラウズ

Why Did My DPI-Unaware Application Suddenly Become DPI-System Aware?

dpi不明なアプリケーションが突然システムになりました このドキュメントは、以前のdpi-unawareアプリケーションがコードの変更なしでDPI-System認識モードに予期せずに移行したシナリオに対応しています。 このシフトは、スケーリングのためのWindows仮想化に対するアプリケーションの依存を混乱させます。

問題:

以前にDPIとして動作していたアプリケーションは、DPIシステムの認識行動を示しています。

可能性の高い原因:最も可能性の高い原因は、直接的または間接的にDPIアウェア依存関係の導入です。 DPI-AWAREコンポーネントを参照すると、DPI認識設定の継承をトリガーできます。

解決戦略:

いくつかの方法では、アプリケーションのDPIが認識されていないステータスを復元できます:

DPI Awareness(AssemblyInfo.cs)を明示的に無効にします:

次の属性をファイルに追加して、継承されたDPI認識設定をオーバーライドします。
  1. アプリマニフェスト構成:AssemblyInfo.csアプリケーションマニフェストファイルで、DPIを明示的に設定してください

    <code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
  2. Windows APIアプローチ:適切なWindows API関数を使用して、プロセスのDPI認識コンテキストを設定します:

    <code class="language-xml"><dpiaware>false</dpiaware></code>
    Windows 7:
  3. Windows 8.1以降:

      または
    • SetProcessDPIAware()Windows 10、バージョン1809以降:
    • 最適な互換性を得るには
    • を使用してを使用します。 SetProcessDpiAwareness() SetProcessDpiAwarenessContext()
    • スレッドごとのDPI認識(必要に応じて):より詳細な制御については、を使用してDPI認識を1回目のベースで管理することを検討してください。 このアプローチは、絶対に必要でない限り、一般にあまり好ましくありません。SetProcessDpiAwarenessContext() DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED
    これらのソリューションのいずれかを実装することにより、アプリケーションを意図したDPIに気づかない動作に戻し、スケーリングの問題を解決できるはずです。 各メソッドを実装した後、徹底的にテストすることを検討してください

以上がなぜ私のdpi-unawareアプリケーションが突然DPIシステムを認識したのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。