【问题标题】:Windows API select bold fontWindows API 选择粗体
【发布时间】:2012-07-09 10:25:10
【问题描述】:

我正在尝试编写一些代码来选择粗体字体(我实际上想获取字体文件名以发送到跨平台字体渲染器,但这不太相关)。我使用 CreateFont() 将 cWeight 设置为 FW_BOLD 并将 pszFaceName 设置为“Arial”。我将此字体选择到 DC 中并使用 GetTextFace() 检查实际选择了哪种字体。结果是宋体。我很惊讶字体不是 Arial Bold,它是一个带有不同字体文件的单独面孔。指定 Arial Bold 字体的唯一方法是将 pszFaceName 设置为“Arial Bold”。不幸的是,简单地将粗体附加到字体名称的末尾仅适用于某些字体,因为某些字体没有单独的粗体字体。

是否有任何通用的方法来指定粗体,以确保返回字体的实际粗体版本?

谢谢

菲尔

【问题讨论】:

  • 我从没想过加粗它与具有不同字体名称的粗体版本是一回事,但我还没有深入研究文本工作。你确定这是正确的吗?
  • 你检查渲染是否不同?我认为 GDI 只是告诉你你请求的字体,自己处理单独的字体版本/模拟粗体。
  • 我认为这里没有简单的出路。
  • Arial Bold 是与 Arial 不同的字体,其中恰好包含“Bold”一词。 Arial 和 Arial Bold 都可以加粗或不加粗。

标签: c++ windows fonts gdi uniscribe


【解决方案1】:

这不是它的工作方式,Windows 字体映射器不会替换人脸名称。 “Arial Bold”不是标准字体,也与标准“Arial”字体没有任何关系。如果你想使用它,那么你必须要求它。

使用 FW_BOLD 请求“Arial”会选择 c:\windows\fonts\arialbd.ttf 字体文件。一种字体文件,专门设计用于呈现粗体 arial。脸名是“Arial”。同样,ariali.ttf 提供斜体版本,arialbi.ttf 提供粗斜体版本,arial.ttf 是普通版本。

【讨论】:

  • 嗯,这消除了我的怀疑。 +1 也许我应该在某个时候更多地研究文本渲染。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2015-11-14
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
相关资源
最近更新 更多