1

目的のフォントが利用できない場合に、Windows が別のフォントではなく特定のフォントを選択する理由は何ですか?

次のコードを使用して特定のフォントを作成しています。

somefont.CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0,
                            DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
                            CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
                            DEFAULT_PITCH|FF_SWISS, "Segoe UI");

Segoe UI が使用できない場合 (Windows XP など)、フォント マッパーは自動的に "Arial" をフォールバックとして選択します。これは実際に私が望んでいるものですが、Windows XP が「Microsoft Sans Serif」などの他のサンセリフ フォントではなく「Arial」を選択する理由です。

4

1 に答える 1

2

オンラインのフォント マッパーの内部動作に関する情報はほとんどないようです。この非常に古い記事がまだ当てはまる場合は、

[フォント属性の]不一致ごとにペナルティが評価され、ペナルティは累積されます。マッパーは、ペナルティスコアが最も低い物理フォントを追跡します...

2 つの異なるフォントのペナルティがまったく同じ場合は、最初に検査されたフォントが選択されます。アプリケーションは、この順序を制御できません。

FF_SWISSそこから、「Segoe UI」が存在しない場合、どのフォントが選択されているかを確認できないと思います。ただし、「aa」で始まる名前のスイス フォントをインストールして、検査順序がおおよそアルファベット順であるかどうかを確認することは有益です。

( @Hans Passant : 私が理解しているように、フォント フォールバックは、デバイス コンテキストにフォントを既に選択してから、フォントにグリフが含まれていない文字をレンダリングしようとした場合にのみ発生します。たとえば、フォント リンクとフォント フォールバックを参照してください。マイケル・カプラン)

于 2013-05-28T10:07:33.587 に答える