【问题标题】:Realising scrolling text with DirectWrite用 DirectWrite 实现滚动文本
【发布时间】:2015-03-30 09:45:21
【问题描述】:

我有一个存储各种记录数据的字符串。这些数据应该可以通过控制台访问。控制台当然只有有限的高度。因此,我不需要渲染整个文本,而只需要渲染可见的内容。为此,我有一个变量,用于存储用户向上滚动的文本底部(最近)端的像素数。现在我想我需要一种方法来找出我的文本的哪一部分适合我的控制台,以及如何告诉 DirectWrite 只渲染它。

到目前为止我做了什么: 现在我正在使用CreateTextLayout(...)DrawTextLayout(...) 来绘制没有滚动功能的完整文本(现在只是一个小的测试文本)。

CreateTextLayout(...) 已经接受了参数maxWidthmaxHeight。所以也许这可以解决只渲染适合控制台的问题。

我还使用DWRITE_PARAGRAPH_ALIGNMENT_FAR 来显示最新的文本行。 但是如何添加额外的滚动(最好是额外的像素而不是线条,这样我就可以通过一些时间控制的增量来实现平滑滚动)?

简而言之

  1. CreateTextLayout(...) 是否为我处理“仅渲染可见部分”?
  2. 如何包含滚动部分?

编辑:更改了标题,因为它没有很好地总结问题。

【问题讨论】:

    标签: c++ visual-c++ directwrite


    【解决方案1】:

    TextLayout 是文本的内部表示。把它想象成一组代表每个字符的图片(字形)(它并不完全正确,但足以解释)。当您最终渲染文本时,渲染目标将仅绘制屏幕上可见的内容,因此它会在与 HDC 重叠的地方被剪切。 这就是它的工作方式:

    当您调用 DrawTextLayout() 时,您为函数提供了绘图的起点(原点)。从原点的 y 位置减去 Scrolling-y-Value...完成。

    如果您想了解有关 Glyphs 的更多信息: -Catch22.com 有使用 uniscribe 的很棒但未完成的 Neatpad 教程(Horror 的 API,但它提供了 DirectWrite 内部工作原理的概念)

    -MSDN 还有一个关于如何通过 DirectWrite 直接在 Glyphs 上工作以及如何编写自己的渲染器的教程: https://msdn.microsoft.com/en-us/library/windows/desktop/dd941787%28v=vs.85%29.aspx

    希望我能帮上忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 2015-04-11
      • 2021-05-19
      • 2015-09-04
      • 2014-03-20
      • 2010-12-11
      • 2011-02-26
      相关资源
      最近更新 更多