2017-11-28 16 views
1

フォントを使用してインストールされたすべてのフォントの名前を印刷していますが、デフォルトのフォント(Segoe UI)を使用している場合は、フォントの文字セットを判別することはできますか?

今、私は次のことをしようとしていると私は理解できない何かが見つかりました:これは、デフォルトのフォントを使用して印刷したことがない

var installedFonts = new System.Drawing.Text.InstalledFontCollection().Families; 

foreach (var family in installedFonts) 
{ 
    var font = new Font(family, 12); 
    if (font.GdiCharSet == 2) // Symbols font 
    { 
     // Print using default font 
    } 
    else // Readable font 
    { 
     // Print using font 
    } 
} 

を。さらに、フォントが異なる文字セットを使用している場合でも、すべてのフォントのGdiCharSet1を返します。

このプロパティは、Font(String, Single, FontStyle, GraphicsUnit, Byte)コンストラクタに異なる文字セットが指定されていない限り、1を返します。

私はByteの値を指定していないので、明らかにフォントを正しく作成していないようです(別のコンストラクタを使用しています)。これは、フォントの値がCharSetであることを知る別の方法(「実際の」方法)があると思います。しかし私はそれをどこでも見つけることができません。誰が私がこれをどのように見つけることができるか知っていますか?


注釈として、メモ帳で管理します。書式>フォント...はフォントセレクタを開きます。 Scriptの下で使用されている文字セットが表示されていることがわかります。

enter image description here

+0

["文字マップ"](http://sites.psu.edu/symbolcodes/wp-content/uploads/sites/4419/2015/07/CharMapWin7.png)ウィンドウツールを使用すると、すべてのフォントに任意の文字セットを作成するオプションがあります。だからあなたの質問は意味をなさない。しかし、あなたの目的は "どの文字がこのフォントで印刷できるか"を決定しようとするようなものです。それは別の質問です。 [this one](https://stackoverflow.com/questions/1439551/get-supported-characters-of-a-font-in-c-sharp)(wpfの場合) – Sinatr

+0

@Sinatr私はおそらく間違ったアプローチを使用していますが、明らかにメモ帳がそれをやっているので何とか識別することは可能です。私の質問は、どのようにこれを行うことができます(可能なので)?上記のコンストラクタで使用するByteの値を知るにはどうすればよいですか? –

+0

すべてのバイト値は、フォントを正常に生成します(試してください、おそらく私は間違っています)。必要な文字が含まれていますか?質問です。 – Sinatr

答えて

1

あなたはGetTextMetrics機能(https://msdn.microsoft.com/en-us/library/windows/desktop/dd144941(v=vs.85).aspx)を使用する必要があります。相互運用使って呼び出されると、それは次の構造取得します、構造体の最後のメンバー

[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)] 
internal struct TEXTMETRIC 
{ 
    public int tmHeight; 
    public int tmAscent; 
    public int tmDescent; 
    public int tmInternalLeading; 
    public int tmExternalLeading; 
    public int tmAveCharWidth; 
    public int tmMaxCharWidth; 
    public int tmWeight; 
    public int tmOverhang; 
    public int tmDigitizedAspectX; 
    public int tmDigitizedAspectY; 
    public char tmFirstChar; 
    public char tmLastChar; 
    public char tmDefaultChar; 
    public char tmBreakChar; 
    public byte tmItalic; 
    public byte tmUnderlined; 
    public byte tmStruckOut; 
    public byte tmPitchAndFamily; 
    public byte tmCharSet; 
} 

tmCharSet、あなたが探しているものです。

フォントの文字セット。文字セット 次の値のいずれかになります。this link後ANSI_CHARSET BALTIC_CHARSET CHINESEBIG5_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET GB2312_CHARSET GREEK_CHARSET HANGUL_CHARSET MAC_CHARSET OEM_CHARSET RUSSIAN_CHARSET SHIFTJIS_CHARSET SYMBOL_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET ...

は、あなたがの簡単な実装を見つけることができます必要なコード。

+0

ええ、私はそれをしていた、@シナトラはそれを言いました。私がやったらすぐに受け入れるよ。ありがとう=] –

+0

これ以上のサポートが必要な場合は、お気軽にコメントしてください。 –

関連する問題