プラットフォーム SDK
EnumFontFamiliesEx

構造体で指定された条件に適合するフォントを列挙します。この列挙は、フォント名と文字セットのいずれか、あるいはその両方を基準に行われます。

int EnumFontFamiliesEx(
  HDC hdc,                          // デバイスコンテキストのハンドル
  LPLOGFONT lpLogfont,              // フォント情報
  FONTENUMPROC lpEnumFontFamExProc, // コールバック関数
  LPARAM lParam,                    // 追加データ
  DWORD dwFlags                     // 未使用;必ず 0 を指定
);

パラメータ

hdc
デバイスコンテキストのハンドルを指定します。
lpLogfont
構造体へのポインタを指定します。この構造体に、列挙したいフォントの特性を入れておきます。ただし、有効なのは次のメンバだけです。
メンバ 説明
lfCharset DEFAULT_CHARSET に設定すると、すべての文字セットのすべてのフォントが列挙されます。有効な文字セットに設定すると、その文字セットのフォントだけが列挙されます。
lfFaceName 空の文字列に設定すると、各フォント名に 1 つずつフォントが列挙されます。有効なフォント名に設定すると、その名前を持つすべてのフォントが列挙されます。
lfPitchAndFamily どの言語版のオペレーティングシステムでも必ず 0 に設定しておかなければなりません。

lpEnumFontFamExProc
アプリケーション定義のコールバック関数へのポインタを指定します。このコールバック関数については、EnumFontFamExProc 関数の説明を参照してください。
lParam
アプリケーション定義の値を指定します。この値は、フォント情報とともにコールバック関数に渡されます。
dwFlags
使用されません。必ず 0 を指定してください。

戻り値

コールバック関数が最後に返した値が返ります。この値は、指定したデバイスで利用可能なフォントファミリにより変わってきます。

解説

EnumFontFamiliesEx 関数は、タグ付きのフォント名を使って文字セットを指定することはしません。必ず正しいフォント名をコールバック関数に渡し、それとは別に文字セット値も渡してください。フォントの列挙は、 構造体の lfCharset メンバと lfFacename メンバの値に基づいて行われます。

EnumFontFamilies 関数と同様に、EnumFontFamiliesEx 関数は、すべてのフォントスタイルを列挙します。同一フォントのスタイルはすべて同じ文字セットに対応するとは限りません。たとえば、Fontorama の Bold には ANSI、Greek、および Cyrillic の文字が含まれますが、Fontorama の Italic には ANSI 文字しか含まれていません。このため、指定したフォントが特定の文字セット(それが ANSI 文字セットであったとしても)に対応していることを前提とした処理は行わないのが賢明です。次の表は、lfCharSet メンバーと lfFaceName メンバのさまざまな組み合わせにより結果を示します。

意味
lfCharSet = DEFAULT_CHARSET
lfFaceName = '\0'
すべての文字セットのすべてのフォントを列挙します。
lfCharSet = DEFAULT_CHARSET
lfFaceName = 特定のフォント
指定したフォントのすべての文字セットとスタイルが列挙されます。
lfCharSet = 特定の文字セット
lfFaceName = '\0'
指定した文字セットのすべてのフォントのすべてのスタイルが列挙されます。
lfCharSet = 特定の文字セット
lfFaceName = 特定のフォント
指定した文字セットの指定されたフォントのすべてのスタイルが列挙されます。

次のサンプルコードは、これらの値の使い方を示します。

// すべてのフォントのすべてのスタイルと文字セットを列挙するには

lf.lfFaceName[0] = '\0';

lf.lfCharSet = DEFAULT_CHARSET;

//Arial フォントのすべてのスタイトと文字セットを列挙するには

lstrcpy((LPSTR)&lf.lfFaceName, "Arial");

lf.lfCharSet = DEFAULT_CHARSET;

//ANSI 文字セットのすべてのフォントのすべてのスタイルを列挙するには

lf.lfFaceName[0] = '\0';

lf.lfCharSet = ANSI_CHARSET;

//Arial フォントの ANSI 文字セットに対応するすべてのスタイルを列挙するには

lstrcpy((LPSTR)&lf.lfFaceName, "Arial");

lf.lfCharSet = ANSI_CHARSET;

EnumFontFamilies 関数と EnumFontFamiliesEx 関数のコールバック関数は非常によく似ています。主な違いは、ENUMLOGFONTEX 構造体にスクリプトフィールドがあることです。

EnumFontFamiliesEx 関数は、lfCharSet メンバと lfFaceName メンバの値に基づいて、フォント内にある文字セットの数だけ同じフォントを列挙するので注意してください。列挙されたフォントをすべて表示すると、ユーザーにとって不便なほど長いリストになってしまう場合もあります。たとえば、Century Schoolbook というフォントは、Baltic、Western、Greek、Turkish、Cyrillic の 5 つの文字セットで列挙されます。これを防ぐには、アプリケーションでフォントのリストにフィルタをかけてください。

対応情報

Windows NT/2000:Windows NT 4.0 以降
Windows 95/98:Windows 95 以降
ヘッダー:Wingdi.h で宣言、Windows.h をインクルード
インポートライブラリ:Gdi32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

EnumFontFamExProc,

Page view tracker