给定一个HFONT,我该如何判断它是否为符号字体?我正在使用的pdf库需要以不同的方式处理符号字体,因此我需要一种编程方法来判断任何给定的字体是否为符号字体。
Mark Ransom的答案在99.999%的情况下都是可行的,但理论上可能会给出错误的答案。
为了避免这种可能性,您应该使用GetTextMetrics
来获取实际字体的TEXTMETRICS
,并检查tmCharSet
是否为SYMBOL_CHARSET
。
检查lfCharSet
和tmCharSet
之间有什么区别?
当您创建一个HFONT
时,Windows会对LOGFONT
进行内部复制。它描述了您想要的字体,这可能与您获得的字体不同。
当您将HFONT
选择到设备(或信息)上下文中时,字体映射器会找到最符合与该HFONT
关联的LOGFONT
的实际字体。然而,最佳匹配可能不是完全匹配的。因此,当您需要查找实际字体的某些信息时,应小心查询HDC
而不是HFONT
。
GetObject
查询 HFONT
,您只会得到原始的 LOGFONT
。因为 GetObject
不知道字体映射器选择(或将选择)哪种实际字体,所以它不能告诉您有关实际字体的任何信息。GetTextMetrics
、GetTextFace
等询问特定 DC 中所选字体的 API,将为您提供有关实际字体的信息。GetObject
)可能总是有效的,因为字体映射器在您需要文本字体时选择符号字体(反之亦然)的几率很小。不过,一般来说,当您想了解有关实际字体的信息时,请找到一种询问 HDC
的方法。
GetObject
返回的是实际选择的字体的LOGFONT
,而不是最初请求的字体;除非你有一个证实链接,否则进行验证可能是值得的。如果您认为GetTextMetrics
更好,欢迎提供另一个答案。 - Mark Ransom