EnumFontFamiliesExA 関数 (wingdi.h)
EnumFontFamiliesEx 関数は、LOGFONT 構造体で指定されたフォント特性と一致するシステム内のすべての一意の名前付きフォントを列挙します。 EnumFontFamiliesEx は、書体名、文字セット、またはその両方に基づいてフォントを列挙します。
構文
int EnumFontFamiliesExA(
[in] HDC hdc,
[in] LPLOGFONTA lpLogfont,
[in] FONTENUMPROCA lpProc,
[in] LPARAM lParam,
DWORD dwFlags
);
パラメーター
[in] hdc
フォントを列挙するデバイス コンテキストへのハンドル。
[in] lpLogfont
列挙するフォントに関する情報を含む LOGFONT 構造体へのポインター。 関数は、次のメンバーを調べます。
メンバー | 説明 |
---|---|
lfCharSet | DEFAULT_CHARSETに設定すると、関数はすべての文字セット内のすべての一意の名前付きフォントを列挙します。 (同じ名前のフォントが 2 つある場合は、列挙されるのは 1 つだけです)。有効な文字セット値に設定した場合、関数は指定された文字セット内のフォントのみを列挙します。 |
lfFaceName | 空の文字列に設定すると、関数は使用可能な書体名ごとに 1 つのフォントを列挙します。 有効な書体名に設定すると、関数は指定された名前を持つすべてのフォントを列挙します。 |
lfPitchAndFamily | オペレーティング システムのすべての言語バージョンでは、0 に設定する必要があります。 |
[in] lpProc
アプリケーション定義のコールバック関数へのポインター。 詳細については、 EnumFontFamExProc 関数に関するページを参照してください。
[in] lParam
アプリケーション定義値。 関数は、この値をフォント情報と共にコールバック関数に渡します。
dwFlags
このパラメーターは使われていないので、0 にする必要があります。
戻り値
戻り値は、コールバック関数によって返される最後の値です。 この値は、指定したデバイスで使用できるフォント ファミリによって異なります。
注釈
EnumFontFamiliesEx 関数は、文字セットを識別するためにタグ付けされた書体名を使用しません。 代わりに、常に正しい書体名と別の文字セット値をコールバック関数に渡します。 関数は、LOGFONT 構造体の lfCharSet メンバーと lfFaceName メンバーの値に基づいてフォントを列挙します。
EnumFontFamilies と同様に、EnumFontFamiliesEx はすべてのフォント スタイルを列挙します。 フォントのすべてのスタイルが同じ文字セットをカバーしているわけではありません。 たとえば、Fontorama Bold には ANSI、ギリシャ語、キリル文字が含まれる場合がありますが、Fontorama Italic には ANSI 文字のみが含まれる場合があります。 このため、ANSI 文字セットであっても、指定したフォントが特定の文字セットをカバーしているとは限りません。 次の表は、 lfCharSet と lfFaceName のさまざまな値の組み合わせの結果を示しています。
値 | 意味 |
---|---|
lfCharSet = DEFAULT_CHARSET lfFaceName = '\0' |
すべての文字セット内のすべての一意の名前付きフォントを列挙します。 同じ名前のフォントが 2 つある場合、列挙されるのは 1 つだけです。 |
lfCharSet = DEFAULT_CHARSET lfFaceName = 特定のフォント |
特定のフォント内のすべての文字セットとスタイルを列挙します。 |
lfCharSet =特定の文字セット lfFaceName = '\0' |
特定の文字セット内のすべてのフォントのすべてのスタイルを列挙します。 |
lfCharSet =特定の文字セット lfFaceName = 特定のフォント |
特定の文字セット内のフォントのすべてのスタイルを列挙します。 |
次のコード サンプルは、これらの値の使用方法を示しています。
// To enumerate all styles and charsets of all fonts:
lf.lfFaceName[0] = '\0';
lf.lfCharSet = DEFAULT_CHARSET;
HRESULT hr;
// To enumerate all styles and character sets of the Arial font:
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler
}
lf.lfCharSet = DEFAULT_CHARSET;
// To enumerate all styles of all fonts for the ANSI character set
lf.lfFaceName[0] = '\0';
lf.lfCharSet = ANSI_CHARSET;
// To enumerate all styles of Arial font that cover the ANSI charset
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler
}
lf.lfCharSet = ANSI_CHARSET;
EnumFontFamilies と EnumFontFamiliesEx のコールバック関数は非常によく似ています。 メイン違いは、ENUMLOGFONTEX 構造体にスクリプト フィールドが含まれていることです。
lfCharSet と lfFaceName の値に基づいて、EnumFontFamiliesEx は、フォントに個別の文字セットがあるのと同じフォントを何度も列挙することに注意してください。 これにより、ユーザーに負担がかかる可能性があるフォントの広範な一覧が作成される可能性があります。 たとえば、バルト、西部、ギリシャ語、トルコ語、キリル文字セットに対して Century Schoolbook フォントを表示できます。 これを回避するには、アプリケーションでフォントの一覧をフィルター処理する必要があります。
多くの東アジア言語のフォントには、英語名とローカライズされた名前の 2 つの書体名があります。 システム ロケールがフォントの言語と一致しない場合、EnumFonts、EnumFontFamilies、EnumFontFamiliesEx は英語の書体名を返します。
デバイス コンテキストのグラフィックス モードが SetGraphicsMode 関数を使用してGM_ADVANCEDに設定され、DEVICE_FONTTYPE フラグが FontType パラメーターに渡されると、この関数はシステム上の型 1 および OpenType フォントの一覧を返します。 グラフィックス モードが GM_ADVANCED に設定されていない場合、この関数は、システム上の種類 1、OpenType、および TrueType フォントの一覧を返します。
注意
wingdi.h ヘッダーは EnumFontFamiliesEx をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | wingdi.h (Windows.h を含む) |
Library | Gdi32.lib |
[DLL] | Gdi32.dll |