鉴于HFONT,如何判断它是否为符号字体?我正在使用的pdf库需要以不同的方式处理符号字体,因此我需要一种方法来以编程方式判断任何给定字体是否为符号字体。
答案 0 :(得分:5)
答案 1 :(得分:1)
Mark Ransom的答案在99.999%的情况下会起作用,但理论上可能会给出错误答案。
为避免这种可能性,您应使用GetTextMetrics
获取实际字体的TEXTMETRICS
,并检查tmCharSet
是否为SYMBOL_CHARSET
。
检查lfCharSet
和tmCharSet
之间的区别是什么?
创建HFONT
时,Windows会制作LOGFONT
的内部副本。它描述了您想要的字体,它可能与您获得的字体不同。
当您在设备(或信息)上下文中选择HFONT
时,字体映射器会找到与LOGFONT
相关联的HFONT
最匹配的实际字体。但是,最佳匹配可能不完全匹配。因此,当您需要找到有关实际字体的内容时,您应该注意查询HDC
而不是HFONT
。
如果您使用HFONT
查询GetObject
,则只需返回原始LOGFONT
。 GetObject
并未告诉您有关实际字体的任何信息,因为它不知道字体映射器选择(或将选择)的实际字体。
询问选定特定DC的字体的API,如GetTextMetrics
,GetTextFace
等,会为您提供有关实际字体的信息。
对于这个问题,Mark的回答(使用GetObject
)可能总是有效,因为当您需要文本字体时,字体映射器选择符号字体的几率(反之亦然)是微不足道的。但是,一般情况下,当您想了解实际字体时,请找一种方法来询问HDC
。