簡體   English   中英

如何判斷字體是否為符號字體?

[英]How do I tell if a font is a symbol font?

給定HFONT,我如何分辨它是一種符號字體? 我正在使用的pdf庫需要以不同的方式對待符號字體,因此,我需要一種以編程方式判斷給定字體是否為符號字體的方法。

使用GetObject可以將字體的屬性獲取為LOGFONT結構。 檢查lfCharSet成員; 如果是SYMBOL_CHARSET,則您具有符號字體。

馬克·蘭瑟姆(Mark Ransom)的答案將在99.999%的時間內起作用,但是從理論上講,它可能給出錯誤的答案。

為了避免這種可能性,您應該使用GetTextMetrics來獲取實際字體的TEXTMETRICS並檢查tmCharSet是否為SYMBOL_CHARSET

檢查lfCharSettmCharSet什么tmCharSet

創建HFONT ,Windows會創建LOGFONT的內部副本。 它描述了所需的字體,該字體可能與您獲得的字體不同。

當您在設備(或信息)上下文中選擇HFONT ,字體映射器會找到與該HFONT關聯的LOGFONT最匹配的實際字體。 但是,最佳匹配可能不是精確匹配。 因此,當您需要了解有關實際字體的信息時,應注意查詢HDC而不是HFONT

如果使用GetObject查詢HFONT ,則只需返回原始LOGFONT GetObject不會告訴您有關實際字體的任何信息,因為它不知道字體映射器選擇(或將選擇)的實際字體。

詢問選擇到特定DC中​​的字體的API,例如GetTextMetricsGetTextFace等,將為您提供有關實際字體的信息。

對於這個問題,Mark的答案(使用GetObject )可能總是GetObject ,因為當您想要文本字體(反之亦然)時,字體映射器選擇符號字體的幾率很小。 但是,總的來說,當您想了解有關實際字體的信息時,請找到一種詢問HDC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM