【问题标题】:How to determine which LOGFONT charset to use?如何确定使用哪个 LOGFONT 字符集?
【发布时间】: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 中选择一种字体时,将该信息保存在某处以供以后使用。

标签: winapi fonts character-encoding mfc


【解决方案1】:

获得字体名称后,您可以使用EnumFontFamiliesEx 查看该字体是否存在于特定字符集。您可以使用DEFAULT_CHARSET 调用一次,如果不起作用,请使用SYMBOL_CHARSET 再次调用它。

无论如何,这是一个猜测。我还没有机会亲自尝试。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2011-03-07
    • 2020-12-29
    • 1970-01-01
    • 2013-04-03
    • 2015-03-01
    相关资源
    最近更新 更多