如何确定使用哪个 LOGFONT 字符集?
Posted
技术标签:
【中文标题】如何确定使用哪个 LOGFONT 字符集?【英文标题】:How to determine which LOGFONT charset to use? 【发布时间】:2019-03-27 20:48:01 【问题描述】:我有一个文本选择/规范对话框,用户可以在其中从列表中指定字体、设置粗体、斜体等。然后我使用LOGFONT
中的信息创建CFont
以随后在CEdit
作为预览。
但是,如果用户选择 Wingdings 之类的符号字体,除非我将 LOGFONT::lfCharset
设置为 SYMBOL_CHARSET
,否则预览将无法正常工作。所以,基本上只给出一个字体名称,我如何确定默认字符集应该是什么(即,我如何判断我是否应该使用SYMBOL_CHARSET
)?
我看到了使用 GetTextMetrics()
的建议,但这涉及将字体设置为 DC,而且我还没有创建字体,所以...?
【问题讨论】:
这和c++这个标签有什么关系? 诚实吗?我误解了标签系统吗?我标记了这个 C++ 和 MFC 以表明我正在工作的环境,是否有必要在问题中也提到这一点? @Kyudos 来自 c++ 标记信息:使用此标记解决有关使用 C++ 编译器编译的代码的问题。 那么,您遇到问题的代码在哪里用它编译,还是行为不正确? 你如何允许用户选择字体?如果您使用ChooseFont()
标准对话框,它会为您提供一个填充的LOGFONT
,然后您可以根据需要进行操作。
@Kyudos 如果您使用 Win32 API EnumFonts()
函数代替自己填充 ComboBox,则将为每个安装的字体提供一个填充的 LOGFONT
。当用户从 ComboBox 中选择一种字体时,将该信息保存在某处以供以后使用。
【参考方案1】:
获得字体名称后,您可以使用EnumFontFamiliesEx
查看该字体是否存在于特定字符集。您可以使用DEFAULT_CHARSET
调用一次,如果不起作用,请使用SYMBOL_CHARSET
再次调用它。
无论如何,这是一个猜测。我还没有机会亲自尝试。
【讨论】:
以上是关于如何确定使用哪个 LOGFONT 字符集?的主要内容,如果未能解决你的问题,请参考以下文章
浏览器在发送请求时如何决定使用哪个字符集?以及我们应该如何处理它?
“é”来自哪个字符集? (Python:带“é”的文件名,如何使用 os.path.exists , filecmp.cmp, shutil.move?)