这一整天都让我抓狂。
我需要获取一个字体文件名(例如:Arial.ttf)基于其名称(在本例中为Arial)以及它是粗体、斜体还是两者兼有。使用这些信息,我需要找到字体文件,以便我可以使用它进行渲染。
更多的例子:
关于如何在C++ (Win32)中实现这一点,有什么想法吗?
发布于 2011-01-02 17:49:33
首先,据我所知,没有可靠的方法可以做到这一点。
Windows API处理的是字体系列和映射,而不是字体文件,后者是在较低级别处理的。还要注意的是,即使你设法获得了字体的文件名,也没有渲染函数(据我所知)会接受它,那么你会怎么处理它呢?
也就是说,您可以在注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts
中查找,以便从其逻辑名称中获得字体的文件名。该解决方案的实现可以在here中找到。
发布于 2016-08-23 13:35:32
与之前的帖子相关,这似乎是一种可靠的方式:
1)从HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts\中读取已注册的Window字体列表\您将在此处获得文件名和备用文件路径。字体名称没有什么用处,因为它们可能会随用户的区域设置而变化。
2)加载TrueType文件(.ttf、.ttc、.otf):使用FreeType https://www.freetype.org/。只需初始化freetype库并使用FT_New_Face(库、路径、0和面)加载face即可。
3)使用FreeType获取字体系列名称。使用FT_Get_Sfnt_Name_Count()和FT_Get_Sfnt_Name()获取字符串表。您需要检查编码是否为Ansi、UTF16或其他,因为某些字符串将采用多种不同的语言和编码。
4)获取OS2 TrueType属性。使用(TT_OS2 *) FT_Get_Sfnt_Table (face,ft_sfnt_os2)获取OS2结构。使用https://www.microsoft.com/typography/otspec/os2.htm#fc之类的文档解释结构
5)现在您有了字体文件路径、族名称、样式属性和其他信息。构建一个列表,并根据字体系列和样式搜索文件的函数。
发布于 2012-12-20 08:42:32
这个Code Project project可以做你想要的事情。因为GetWinVer函数在XP停止,所以它在Windows7上失败了。为Windows7添加案例是微不足道的。
https://stackoverflow.com/questions/4577784
复制相似问题