共用方式為


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,函式會列舉所有字元集中所有唯一命名的字型。 (如果有兩個字型具有相同的名稱,則只會列舉一個字型。如果設定為有效的字元集值,函式只會列舉指定字元集中的字型。
lfFaceName 如果設定為空字串,函式會列舉每個可用字樣名稱中的一個字型。 如果設定為有效的字樣名稱,函式會列舉具有指定名稱的所有字型。
lfPitchAndFamily 操作系統的所有語言版本都必須設定為零。

[in] lpProc

應用程式定義回呼函式的指標。 如需詳細資訊,請參閱 EnumFontFamExProc 函式。

[in] lParam

應用程式定義的值。 函式會將此值傳遞至回呼函式以及字型資訊。

dwFlags

此參數未使用,而且必須是零。

傳回值

傳回值是回呼函式所傳回的最後一個值。 此值取決於指定裝置可用的字型系列。

言論

EnumFontFamiliesEx 函式不會使用標記的字樣名稱來識別字元集。 相反地,它一律會將正確的字樣名稱和個別的字元集值傳遞給回調函式。 函式會根據 LOGFONT 結構中 lfCharSetlfFaceName 成員的值來列舉字型。

如同 EnumFontFamiliesEnumFontFamiliesEx 會列舉所有字型樣式。 並非所有字型樣式都涵蓋相同的字元集。 例如,Fontorama Bold 可能包含 ANSI、希臘文和斯拉夫字元,但 Fontorama 斜體可能只包含 ANSI 字元。 因此,最好不要假設指定的字型涵蓋特定的字元集,即使它是 ANSI 字元集也一樣。 下表顯示 lfCharSetlfFaceName的各種值組合結果。

意義
lfCharSet = DEFAULT_CHARSET

lfFaceName = '\0'

列舉所有字元集內所有唯一命名的字型。 如果有兩個字型具有相同的名稱,則只會列舉一個字型。
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;

EnumFontFamiliesEnumFontFamiliesEx 的回呼函式非常類似。 主要差異在於,ENUMLOGFONTEX 結構包含腳本欄位。

請注意,根據 lfCharSetlfFaceName的值,EnumFontFamiliesEx 會列舉字型中相異字元集的相同字型。 這可以建立廣泛的字型清單,對使用者造成負擔。 例如,Century Schoolbook 字型可以針對波羅的海、西方、希臘文、土耳其文和斯拉夫字元集顯示。 若要避免這種情況,應用程式應該篩選字型清單。

許多東亞語言的字型有兩個字樣名稱:英文名稱和當地語系化名稱。 EnumFontsEnumFontFamiliesEnumFontFamiliesEx 如果系統地區設定不符合字型語言,則會傳回英文字型名稱。

當裝置內容上的圖形模式設定為GM_ADVANCED使用 SetGraphicsMode 函式,並將DEVICE_FONTTYPE旗標傳遞至 FontType 參數時,此函式會傳回系統上類型 1 和 OpenType 字型的清單。 當圖形模式未設定為GM_ADVANCED時,此函式會傳回系統上類型 1、OpenType 和 TrueType 字型的清單。

注意

wingdi.h 標頭會根據 UNICODE 預處理器常數的定義,將 EnumFontFamiliesEx 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 wingdi.h (包括 Windows.h)
連結庫 Gdi32.lib
DLL Gdi32.dll

另請參閱

EnumFontFamExProc

EnumFontFamilies

EnumFonts

字型和文字函式

字型和文字概觀

LOGFONT