« コードページの続き | トップページ | HDDがほしい。 »

2007年6月15日 (金)

フォントの列挙

今回はフォントの列挙。

Windowsではフォントを列挙するAPIとしてEnumFonts、EnumFontFamilies、EnumFontFamiliesExが用意されているが、MSDNによると、前の二つは16bit版の互換性のために用意されているそうなので、ここでは、EnumFontFamiliesExを使うことにするが、このAPIを使ってフォントを列挙してみる。ここでは、フォントダイアログの一覧に列挙されているフォントの一覧を取得してみる。

Enumfont1_1

EnumFontFamiliesでは、第2引数として渡すLogFont構造体のlfCharsetとlfFaceNameフィールドによって、列挙するフォントを制御するが、まずは、それぞれにDEFAULT_CHARSETと空文字列を設定して、すべて列挙してみる。結果は下の通り。

Enumfont1_2_7      

フォントタイプは、コールバック関数の第3引数として返されるFontTypeを使ってフォントの種類(ラスタフォント、ベクタフォント、TrueTypeフォント(OpenTypeを含む))かを判断している。タイプフェイス名(フォントファミリ名)には、第2引数として返されるNewTextMetricExのelfLogFontのlfFaceNameフィールド、文字セットにはNewTextMetricExのelfLogFontのlfCharset、スクリプトにはEnumLogFontExのlfScriptの値を表示している。

MSDNの説明にもあるように、lfCharsetにDEFAULT_CHARSET、lfFaceNameに空文字列を設定するとすべてのタイプフェイスのすべての文字セットが列挙されているのがわかる。で、これをいかにフィルタするかが、肝である。

先ほどの結果をどうフィルタするかだが、タイプフェース名が重複する行を排除すればまず問題ないであろうが、MSDNのCreateFontのfdwOutputPrecisionパラメータの説明にあるように、種類の異なる同じ名前をもつフォントがある可能性があるので、(フォントタイプ、タイプフェース)の組で重複する行を排除したほうがよさそうである。実行結果は下のとおり。

Enumfont1_3

自分の環境ではリストアップされたタイプフェースは50個であった。そして、すべてのフォントを表示するように設定したフォントダイアログでも50個のタイプフェースがリストアップされたのでよさそうである。まぁ、このAPIについてはあまり深入りするつもりはないのでここまで。参考までに、英語であるが、ここここここを読んでみるといいかもしれない。

最後に、タイプフェースとフォントの違いについて触れておく。タイプフェースとは、同一の書体を持つフォントのグループのことである。参考にあげた記事の中でも触れているが、例えば、Arialタイプフェースについて見てみよう。Arialタイプフェースには、スタイルに応じて、4つのフォントが用意されている。標準スタイルのArialフォント、太字スタイルのArial Boldフォント、斜体スタイルのArial Italicフォント、太字・斜体スタイルのArial Bold Italicである。「コントロールパネル」->「フォント」からそれを確認できる。

Enumfont1_4

これら、スタイルの異なる4つのフォントがグループ化され、Arialタイプフェイス(一般的な用語を使うとArialフォント)と呼ばれているのである。ちなみに、上の画面でArial Blackとあるが、これは別グループでArial Blackタイプフェイス(Arial Blackフォント)と呼ばれる。また、MS Sans Serifはベクタフォントであるが、TrueType以外のフォントはフォント名とタイプフェース名が同じになる。また、日本語のWindows環境でよく使うフォントとして、MS ゴシックなどがあるが、通常スタイルのフォントしか用意されていなく、他のスタイルを指定したときは、GDIのラスタライザがエミュレーションでグリフのビットマップを作りだしているようである。なにせ、漢字など収録字数が多いので、各スタイル用のフォントを作るのは大変だからなのかもしれない。

« コードページの続き | トップページ | HDDがほしい。 »

Windows」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651868

この記事へのトラックバック一覧です: フォントの列挙:

« コードページの続き | トップページ | HDDがほしい。 »

自作ソフトウェア

無料ブログはココログ

メモ