【问题标题】:Irritating Text Wrapping with GDI & Direct3D使用 GDI 和 Direct3D 进行令人讨厌的文本换行
【发布时间】:2011-01-24 04:49:58
【问题描述】:

如果我使用 Direct3D 的 DrawText,它的行为类似于 GDI 对应物,并且我启用 DT_WORDBREAK 格式化标志,它会在出现情况时剪切撇号上的文本,这会使许多标题和文本显示看起来像一团糟.例如,它将显示为:

骑士
头

什么时候应该说:


骑士的
头

考虑到字体处理函数的限制性,这似乎不太可能,但有没有办法指定它,以便它只在空白处剪切文本,或者当完全没有什么可以做的时候?

【问题讨论】:

  • 来自 D3DX 实用程序库 (ID3DXFont::DrawText)?我不相信核心 D3D 具有 DrawText 功能。 Direct2D 确实如此,而 D2D 的 DrawText 似乎没有这个问题。

标签: c++ gdi direct3d word-wrap


【解决方案1】:

您可以在GetTextExtentPoint32 函数的帮助下手动换行。

【讨论】:

    【解决方案2】:

    我之前遇到过这个问题,唯一的解决方案是编写自己的文字包装器,使用 DT_CALCRECT 来测量给定字符串的宽度。这很烦人,而且确实很糟糕,但我从未见过其他选择。

    【讨论】:

      【解决方案3】:

      我不这么认为(我可能错了)。但是您可以对宽度设置“虚拟”限制。计算行长 (char_count*font_width) 并自己进行跳跃。您甚至可以添加特殊字符“\n”,以插入您自己的跳转...

      【讨论】:

      • 考虑到字体的字符大小不同,使用 char_count * font_width 并不是一个很好的解决方案。
      • @Jengerer:你说得对,最好使用 GetTextExtentPoint32 之类的东西
      • @codebolt:这实际上是解决问题的一个非常有用的功能。如果您可以将该建议放入单独的答案中,我会接受,因为它似乎是最有效的解决方案。谢谢!
      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 2012-09-02
      • 2012-11-08
      • 2015-01-07
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多