【问题标题】:Is it possible to determine the fonts Windows chooses for font-linking?是否可以确定 Windows 为字体链接选择的字体?
【发布时间】:2011-01-26 12:19:02
【问题描述】:

假设您有一个包含两个或多个脚本中的文本的字符串。当您使用像TextOut 这样的 GDI 函数时,(现代版本的)Windows 将执行“字体链接”。也就是说,GDI 将使用您选择的字体绘制它可以绘制的内容,并以它自动选择的适当字体绘制其余部分。例如,如果您的文本一部分是英文(使用罗马字母),一部分是中文(使用 CJK 字符),并且您选择了 Arial,则英文部分将使用 Arial 绘制,而中文部分将用另一种具有 CJK 字形的字体绘制。

我的问题是,有没有办法确定TextOut 将选择(或确实选择)字体链接?

我必须使用不执行自动字体链接的低级 Uniscribe API 绘制一些文本。我已经实现了自己的字体链接,但有时我的算法选择的字体与TextOut 为相同的文本选择的字体不同。我正在尝试更好地理解 Windows 算法,但我并不擅长识别字体(尤其是在不熟悉的脚本中)。

【问题讨论】:

  • “自动”总结了它该死的好! :)

标签: winapi gdi textout font-linking


【解决方案1】:

字体由注册表项选择。在this article. 引用相关部分中有很好的描述:

如果字体链接在您的 设备,您可以检查注册表 通过枚举的子键 注册表项在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 确定链接的映射 字体到基本字体。您可以添加链接 通过使用 Regedit 创建额外的 子键。

【讨论】:

  • 谢谢,这是一个很好的资源。但我在另一篇博客中读到,这些注册表项只是为了向后兼容而存在,它们不再真正驱动字体链接。例如,在我的机器上,TextOut 将为不在该部分注册表中的基本字体进行字体链接。这也不是字体回退,因为为其他脚本选择的字体因基本字体而异。
  • 我在早期的迭代中使用了 IMLangFontLink2,但是当我将 LTR 脚本与 RTL 脚本混合时它会导致问题。我认为这是一个相当古老的解决方案,它可能仍然是为了向后兼容。
  • 那篇文章的当前链接is here - 但当然它并没有解决@AdrianMcCarthy 上述任何一种方式的评论。
猜你喜欢
  • 2018-05-12
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多