シンプルな wysiwyg テキスト エディターと同等の、テキスト レンダリングを行う ac# アプリケーションがあります。
TextRenderer.DrawText を使用してテキストを画面にレンダリングし、GetTextExtentPoint32 を使用してテキストを測定しているため、同じ行にさまざまなフォント スタイル/サイズを配置できます。
Vista では、これで問題なく動作します。ただし、XP では、Arial のレンダリングが異なります。「o」や「b」などの特定の文字は、Vista よりも幅が広くなります。GetTextExtentPoint32 は、Vista と同じように文字列を測定しているようですが、幅が狭くなっています。最終的な結果として、前のテキストが実際の画面上のサイズよりも小さく測定されるため、テキストの実行がその前のテキストと重なることがあります。
また、私のテキスト レンダリング コードは ie のテキスト レンダリングを正確に模倣しており (単純な書式設定と英語のみ)、テキスト レンダリングは vista と xp の間で一貫しているようです。
何が起こっているかについて何か考えがある人はいますか?
つまり、TextRenderer.DrawText と GetTextExtentPoint32 は、Arial の XP では一致しません。DrawText は特定の文字を Vista よりも大きくまたは小さく描画するようですが、GetTextExtentPoint32 は Vista と同じようにテキストを測定しているようです (つまり、XP と Vista の両方でのテキスト レンダリングと一致するようです)。それが理にかなっていることを願っています。
注: 残念ながら、 TextRenderer.MeasureString は私の要件を満たすほど高速でも正確でもありません。私はそれを使用しようとしましたが、それを引き裂かなければなりませんでした。