【发布时间】:2023-03-06 03:46:01
【问题描述】:
我一直在尝试获取 Windows 上已安装字体的列表,包括字体样式。
经过调查,发现需要使用:EnumFontFamiliesEx。 我使用它,但我只得到字体名称而不是该字体的所有样式。
例如:对于字体:“Verdana”
有四种不同的风格,但我只有一种——常规的。 我的问题是:如何获取包含所有样式的字体列表?
我的代码:
void getFonts()
{
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
HDC hDC = GetDC(NULL);
EnumFontFamiliesEx(hDC, &lf, (FONTENUMPROC)(EnumFontFamExProc), NULL, 0);
}
int CALLBACK EnumFontFamExProc(
ENUMLOGFONTEX *lpelfe,
NEWTEXTMETRICEX *lpntme,
DWORD FontType,
LPARAM lParam
)
{
UTF8String fontName = (lpelfe->elfFullName);
return 1;
}
ENUMLOGFONTEX *lpelfe - 包含字体。但我没有得到所有不同的风格
经过更多调查,我发现如果我将 lfFaceName 更改为特定字体,该方法将返回所有样式。
// 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" );
所以我不确定我应该做什么,我需要获取所有已安装字体的所有样式。
提前谢谢你
【问题讨论】: