我正在尝试创建一个字体列表供用户选择。我正在使用该EnumFontFamiliesEx
函数来执行此操作,但不幸的是,返回的字体列表太长了。有许多额外的字体看起来很无聊、重复、用于不同的语言,或者以其他方式不希望向用户显示。我的屏幕截图最能说明我试图过滤掉的垃圾。
我的调用代码EnumFontFamiliesEx
如下所示:
LOGFONT lf;
memset(&lf, 0, sizeof(lf));
lf.lfCharSet = DEFAULT_CHARSET;
// screenDC is result of CreateCompatibleDC(NULL)
EnumFontFamiliesEx(screenDC, &lf, GetFontsCallback, NULL, 0);
在按字母顺序排序并删除具有重复面孔名称的字体后,结果列表如下所示:
如您所见,ChooseFont
字体通用对话框显示了一个非常合理的字体列表,该列表对用户友好且有意义。另一方面,我的代码显示了一长串额外字体:以“@”开头的字体(为什么?它们甚至是为了什么?),Arial 字体的 3 种额外变体,以及其他几种用途不明的字体,如 Aheroni,安达卢斯、新悦椿、悦椿UPC等。这太疯狂了。
如何过滤返回的字体列表EnumFontFamiliesEx
,使其与对话框中显示的列表完全匹配ChooseFont
?