<Return[E]><Top>

EnumFontFamiliesEx

Declare Function Api_EnumFontFamiliesEx& Lib "gdi32" Alias "EnumFontFamiliesExA" (ByVal hDC&, lpLogFont As LOGFONT, ByVal lpEnumFontProc&, ByVal lParam&, ByVal dw&)

Declare Function EnumFontFamiliesEx Lib "gdi32" Alias "EnumFontFamiliesExA" (ByVal hdc As Long, lpLogFont As LOGFONT, ByVal lpEnumFontProc As Long, ByVal lParam As Long, ByVal dw As Long) As Long

構造体で指定された条件に適合するフォントを列挙する。

この列挙は、フォント名と文字セットのいずれか、あるいはその両方を基準に行われる。

パラメータ
hdc
    デバイスコンテキストのハンドルを指定する。
lpLogfont
    構造体へのポインタを指定する。この構造体に、列挙したいフォントの特性を入れておく。ただし、有効なのは次のメンバだけである。

    メンバ                         

説明                                                                                                                        

    lfCharset

 

DEFAULT_CHARSET に設定すると、すべての文字セットのすべてのフォントが列挙される。有効な文字セットに設定すると、その文字セットのフォントだけが列挙される。

    lfFaceName

 

空の文字列に設定すると、各フォント名に 1 つずつフォントが列挙される。有効なフォント名に設定すると、その名前を持つすべてのフォントが列挙される。

    lfPitchAndFamily

どの言語版のオペレーティングシステムでも必ず 0 に設定しておかなければならない。

lpEnumFontFamExProc
    アプリケーション定義のコールバック関数へのポインタを指定する。
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 つの文字セットで列挙される。これを防

    ぐには、アプリケーションでフォントのリストにフィルタをかける。