2

ウィンドウが「テキストのサイズを「125%」に変更するように設定されている場合、Win32 アプリケーションの UI (ウィンドウ サイズではない) が拡大されます。これにより、テキスト文字列が切り取られ、UI 要素がウィンドウの端から消えます。

テキストが拡大されず、アプリが正しく表示されるように、これが起こらないようにしたいと思います。この古いレガシ アプリを適切に DPI 対応にするための時間投資は高すぎるため、Windows が UI 要素のサイズを変更して UI を壊さないようにすることで、アプリを使用できるようにしたいだけです。

起動時に SetProcessDPIAware() を呼び出してみましたが、それが機能しない場合は、アプリがマニフェストで DPI 対応であることを通知します。ただし、これらの措置はいずれも効果がありません。

DPI 認識を指定するために使用しているマニフェスト フラグメント:

<?xml version='1.0' encoding='utf-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <asmv3:application
           xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings
      xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
4

4 に答える 4

0

125% のフォント スケーリングの場合、DPI 対応の設定は関係ありません。何が起こるかというと、テキストが 25% 大きくなり、それに合わせて UI を拡大する責任が生じます。より大きなテキストに対応するには、通常、ダイアログを 25% 大きくする必要があります。サイズをスケーリングするだけでなく、位置もスケーリングする必要があります。そのすべてをコーディングするのはあなた次第です。または、それを行う UI フレームワークを使用します。

フォントのスケーリングが 125% を超える場合は、DPI 対応の設定が有効になります。何が起こるか:

  1. アプリが DPI 対応としてマークされていない場合、Windows はラスター イメージのサイズ変更を使用してアプリをスケーリングします。これにより、視覚要素がピクセル化されます。
  2. アプリが DPI 対応としてマークされている場合、Windows はアプリを忠実にレンダリングします。繰り返しになりますが、テキストに合わせて UI をスケーリングする責任はユーザーにあります。

このMSDN 記事には、すべての詳細が記載されています。

特定の質問に戻ります。あなたが言った:

テキストが拡大されず、アプリが正しく表示されるように、これが起こらないようにしたいと思います。

つまり、ユーザーのフォント スケーリング設定を無視し、ユーザーの希望に関係なく 100% DPI でレンダリングしたいと言っているということです。これを行うには、すべてのテキストのサイズを 25% 縮小します。そうすることは本当にお勧めしません。

于 2013-04-17T17:09:00.257 に答える
0

私のチームのアプリでは、アプリケーション属性ではなく、アセンブリ属性に asmv3 の xmlns 属性があります。

この行の代わりに:

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>

この行:

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0' xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

製品のアプリ マニフェストを取得し、それを と 親ノードだけに分解しました。ここに参照用があります:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
于 2021-11-21T04:07:22.370 に答える