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 結構中 lfCharSet 和 lfFaceName 成員的值來列舉字型。
如同 EnumFontFamilies,EnumFontFamiliesEx 會列舉所有字型樣式。 並非所有字型樣式都涵蓋相同的字元集。 例如,Fontorama Bold 可能包含 ANSI、希臘文和斯拉夫字元,但 Fontorama 斜體可能只包含 ANSI 字元。 因此,最好不要假設指定的字型涵蓋特定的字元集,即使它是 ANSI 字元集也一樣。 下表顯示 lfCharSet 和 lfFaceName的各種值組合結果。
值 | 意義 |
---|---|
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;
EnumFontFamilies 和 EnumFontFamiliesEx 的回呼函式非常類似。 主要差異在於,ENUMLOGFONTEX 結構包含腳本欄位。
請注意,根據 lfCharSet 和 lfFaceName的值,EnumFontFamiliesEx 會列舉字型中相異字元集的相同字型。 這可以建立廣泛的字型清單,對使用者造成負擔。 例如,Century Schoolbook 字型可以針對波羅的海、西方、希臘文、土耳其文和斯拉夫字元集顯示。 若要避免這種情況,應用程式應該篩選字型清單。
許多東亞語言的字型有兩個字樣名稱:英文名稱和當地語系化名稱。 EnumFonts、EnumFontFamilies和 EnumFontFamiliesEx 如果系統地區設定不符合字型語言,則會傳回英文字型名稱。
當裝置內容上的圖形模式設定為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 |