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 結構的指標,其中包含要列舉之字型的相關信息。 函式會檢查下列成員。

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

[in] lpProc

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

[in] lParam

應用程式定義值。 函式會將此值連同字型資訊傳遞至回調函式。

dwFlags

這個參數不會使用,而且必須是零。

傳回值

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

備註

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

如同 EnumFontFamilies,EnumFontFamiliesEx 會列舉所有字型樣式。 並非所有字型樣式都涵蓋相同的字元集。 例如,Fontorama Bold 可能包含 ANSI、希臘文和斯拉夫字元,但 Fontorama Italic 可能只包含 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 字型可以針對西歐、希臘文、土耳其文和斯拉夫字元集顯示。 若要避免這種情況,應用程式應該篩選字型清單。

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

當裝置內容上的圖形模式設定為 GM_ADVANCED使用 SetGraphicsMode 函式,並將 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)
程式庫 Gdi32.lib
Dll Gdi32.dll

另請參閱

EnumFontFamExProc

EnumFontFamilies

EnumFonts

字型和文字函式

字型和文字概觀

LOGFONT