Share via


EnumFontFamiliesExW 関数 (wingdi.h)

EnumFontFamiliesEx 関数は、LOGFONT 構造体で指定されたフォント特性に一致する、システム内のすべての一意の名前付きフォントを列挙します。 EnumFontFamiliesEx は、書体名、文字セット、またはその両方に基づいてフォントを列挙します。

構文

int EnumFontFamiliesExW(
  [in] HDC           hdc,
  [in] LPLOGFONTW    lpLogfont,
  [in] FONTENUMPROCW 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 文字セットであっても、指定したフォントが特定の文字セットをカバーしているとは限りません。 次の表は、 lfCharSetlfFaceName のさまざまな値の組み合わせの結果を示しています。

説明
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 構造体にスクリプト フィールドが含まれていることです。

なお、EnumFontFamiliesEx、lfCharSetlfFaceName の値に基づいて、フォントに個別の文字セットがある場合と同じフォントを何度も列挙します。 これにより、フォントの広範な一覧が作成され、ユーザーに負担になる可能性があります。 たとえば、バルト、西部、ギリシャ語、トルコ語、キリル文字セットに対して Century Schoolbook フォントを表示できます。 これを回避するには、アプリケーションでフォントの一覧をフィルター処理する必要があります。

多くの東アジア言語のフォントには、英語名とローカライズされた名前の 2 つの書体名があります。 システム ロケールがフォントの言語と一致しない場合、EnumFontsEnumFontFamiliesEnumFontFamiliesEx は英語の書体名を返します。

デバイス コンテキストのグラフィックス モードが SetGraphicsMode 関数を使用してGM_ADVANCEDに設定され、DEVICE_FONTTYPE フラグが FontType パラメーターに渡されると、この関数はシステム上の型 1 および OpenType フォントの一覧を返します。 グラフィックス モードが GM_ADVANCED に設定されていない場合、この関数はシステム上の種類 1、OpenType、および TrueType フォントの一覧を返します。

Note

wingdi.h ヘッダーは EnumFontFamiliesEx をエイリアスとして定義します。このエイリアスは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー wingdi.h (Windows.h を含む)
Library Gdi32.lib
[DLL] Gdi32.dll

関連項目

EnumFontFamExProc

EnumFontFamilies

EnumFonts

フォント関数とテキスト関数

フォントとテキストの概要

Logfont