勇芳软件工作室.汉化:  Fonts and Text > Fonts and Text Functions >

EnumFontFamiliesEx

Previous pageReturn to chapter overviewNext page

描述

 

EnumFontFamiliesEx函数枚举系统中符合LOGFONT结构指定的字体特征的所有唯一命名的字体。EnumFontFamiliesEx枚举基于字体名称,字符集或两者的字体。

 

C++ 语法

 

int EnumFontFamiliesEx(

__in  HDC hdc,

__in  LPLOGFONT lpLogfont,

__in  FONTENUMPROC lpEnumFontFamExProc,

__in  LPARAM lParam,

__in  DWORD dwFlags

);

 

PowerBASIC 语法

 

FUNCTION EnumFontFamiliesExA ( _

BYVAL hdc AS DWORD, _

BYREF lpLogfont AS LOGFONTA, _

BYVAL lpEnumFontFamExProc AS DWORD, _

BYVAL lParam AS LONG, _

BYVAL dwFlags AS DWORD _

) AS LONG

 

Unicode版本:

 

FUNCTION EnumFontFamiliesExW ( _

BYVAL hdc AS DWORD, _

BYREF lpLogfont AS LOGFONTW, _

BYVAL lpEnumFontFamExProc AS DWORD, _

BYVAL lParam AS LONG, _

BYVAL dwFlags AS DWORD _

) AS LONG

 

参数

 

hdc

 

[in]处理设备上下文。

 

lpLogfont

 

指向LOGFONT结构的指针,其中包含有关要枚举的字体的信息。该函数检查以下成员。

 

会员

描述

为lfcharset

如果设置为DEFAULT_CHARSET,则该函数枚举所有字符集中所有唯一命名的字体。(如果有两个同名的字体,则枚举只有一个。)如果设置为有效的字符集值,则该函数仅枚举指定字符集中的字体。

lfFaceName

如果设置为空字符串,则该函数枚举每个可用字体名称中的一种字体。如果设置为有效的字体名称,该函数将枚举所有具有指定名称的字体。

lfPitchAndFamily

对于操作系统的所有语言版本,必须设置为零。

 

lpEnumFontFamExProc

 

[in]指向应用程序定义的回调函数的指针。有关详细信息,请参阅EnumFontFamExProc功能

 

lParam

 

[in]指定应用程序定义的值。该函数将该值与字体信息一起传递给回调函数。

 

dwFlags

 

[in]此参数不使用,必须为零。

 

返回值

 

返回值是回调函数返回的最后一个值。该值取决于指定设备可用的字体系列。

 

备注

 

EnumFontFamiliesEx函数不使用标记的字体名称来标识字符集。相反,它总是将正确的字体名称和单独的字符集值传递给回调函数。该函数根据LOGFONT结构中的为lfcharsetlfFacenameit成员的值枚举字体。

 

EnumFontFamilies一样,EnumFontFamiliesEx枚举所有字体样式。不是所有样式的字体都覆盖相同的字符集。例如,Fontorama Bold可能包含ANSI,Greek和Cyrillic字符,但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, 6, "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, 6, "Arial" );

if (FAILED(hr))

{

// TODO: write error handler

}

lf.lfCharSet = ANSI_CHARSET;

 

EnumFontFamilies??和EnumFontFamiliesEx的回调函数非常相似。主要区别在于ENUMLOGFONTEX结构包括脚本字段。

 

请注意,根据lfCharSetlfFaceName的值,EnumFontFamiliesEx将枚举与字体中有不同字符集相同的字体多次。这可以创建一个广泛的字体列表,这对于用户来说可能是繁重的。例如,世界教科书字体可以出现在波罗的海,西方,希腊语,土耳其语和西里尔字符集中。为了避免这种情况,应用程序应该过滤字体列表。

 

许多东亚语言的字体有两个字体名称:英文名称和本地化名称。EnumFontsEnumFontFamiliesEnumFontFamiliesEx如果系统区域设置与字体的语言不匹配,则返回英文字体名称。

 

当使用SetGraphicsMode函数将设备上下文的图形模式设置为GM_ADVANCED,并将DEVICE_FONTTYPE标志传递给FontType参数时,该函数将返回系统上的类型1和OpenType字体的列表。当图形模式未设置为GM_ADVANCED时,该函数将返回系统上的类型1,OpenType和TrueType字体的列表。

 

Windows 95/98 / Me:Microsoft Layer for Unicode支持EnumFontFamiliesExW.

 

引用文件 #INCLUDE Once

 

WinGdi.inc(包括Windows.inc)