2011-12-05 5 views
4

system.drawing名前空間のFontFamily.GenericSansSerifを使用する画像生成コードを確認しています。私は通常、xhtml/cssのフォント選択ステートメントの末尾に、より望ましい(特定の)フォントが見つからない場合のフォールバック/最終手段としてのコードを見ています。 .netフレームワークでは、これが実際に選択するフォントに影響を与える環境パラメータは何ですか? GenericSansSerifを指定するときに.netフレームワークがどのようにフォントを選択するかを記述する、ある種のチャートがありますか?System.Drawing.FontFamily.GenericSansSerif - 選択する基になるフォントに何が影響しますか?

答えて

3

GenericSansSerifに関しては、 "Microsoft San Serif"、 "Arial"、 "Tahoma"の順に次のフォントからファミリを返そうとします。これらのフォントがインストールされていない場合は、最初にインストールされたフォントのファミリが名前順に選択されているように見えます。

GenericSerifに関しては、Times New Romanという名前のフォントからファミリを返そうとします。それがインストールされていない場合は、GenericSanSerifと同じ規則が使用されます。つまり、Times New Romanフォントを削除した場合は、GenericSanSerifと同じです。

+0

:代わりに、あなたはCSSで見るフォールバック動作を模倣した独自のメソッドを書くことができます。ありがとう。 – user1082202

0

少し反射(反射?)した後、私はこれがどのように機能するか説明することができます。

FontFamily.GenericSansSerifFontFamily.GenericSerifの両方とも、システムのデフォルトフォントを参照する内部コンストラクタを使用します(IntPtr)。いずれの場合も、IntPtr.Zeroを渡します。これにより、GDI +に選択を効果的にさせることができます(私はその特定のウサギの穴を降りないことに決めました)。

基本的には、FontFamilyクラスは封印されていてポインタを使用しているため、これらのプロパティをオーバーライドすることには気をつけません。フォールバック・ロジックが何であるかを知るために

グッド
public FontFamily DefaultFont(params string[] fonts) 
{ 
    // Try to return the first matching font 
    foreach (var font in fonts) 
    { 
     try { return new FontFamily(font); } 
     catch (ArgumentException) { } 
    } 

    // Resort to system default 
    return new FontFamily(new GenericFontFamilies()); 
} 
+0

これは、コントロールの子孫によって使用されるデフォルトフォントの変更には役立ちません。 –

関連する問題