Usecompatibletextrenderingがここで必要なのはなぜですか?
-
26-09-2019 - |
質問
私は基本的な何かが欠けていると思います。できれば、それが何であるか教えてください。
VS2008を使用して、小さなC ++ Winformsアプリを開発しました。そのため、.NET 3.5 SP1を使用して構築されています。それが重要な場合、私の開発ボックスはWin7です。
WinFormsコントロールのUSECOPATIBLETEXTRENDERINGプロパティのデフォルト値は、VSTUDIOのこのバージョンでは偽です。そして、これは私にとって重要ではないはずです、私は考えていません。カスタムで描かれたテキストやコントロールはありません。
アプリは私のWin7ボックスで実行されているように見えます。
パッケージ化し(.NET 3.5に沿ってドラッグ)、WinXPデスクトップの1つにインストールすると、ボタンとラベルは見栄えがよくありません。テキストはそれらに切り刻まれています。
usecompatibletextrenderingをtrueに設定してからxpボックスで実行すると、テキストがボタンとラベルに収まります。
私の質問は:なぜですか?インストールではXPボックスに.NET 3.5を配置するため、アプリはWinFormsの適切なバージョンを見つけて使用できるはずですよね?
これらのボックスにapp + .net 3.5を配置する前に、.netはまったくありません。自動マイクロソフトの更新は取得されません。私たちのITガイは、パッチとアップグレードをゲートします。
この種のことは、私が作成したアプリで以前に起こりました。それらはエンジニアリングマシンで見栄え/仕事をしています。企業ボックスで実行されると、通常は実行せず、VCREDISTをインストールする必要があります。
手元の質問に戻る:Usecompatibletextrenderingセットを偽にすると、テキストはより良く見えます。テキストが適合しないようにしているXPボックスに何が欠けているのかを理解したいと思います。
ありがとう
s
解決
これはおそらくスケーリングの問題であり、XPマシンには異なるビデオアダプターDPI設定または異なるシステムフォントサイズがある場合があります。スケーリングは、フォームのAutoscaleModeと、コンテナコントロールのフォントプロパティを「継承」するかどうかの影響を受けます。これは、プロパティウィンドウでフォントプロパティが太字でない場合に行われます。
スケーリングがフォームでプロパティを機能させるかどうかを確認する1つの簡単な方法:
protected:
virtual void OnLoad(EventArgs^ e) override {
this->Font = gcnew System::Drawing::Font(this->Font->FontFamily,
this->Font->SizeInPoints * 125 / 96);
}
それはそれを拡大します。おそらくXPマシンでスケーリングされ、96/125を使用します。