使用DirectWrite实现滚动文本

Realising scrolling text with DirectWrite

本文关键字:文本 滚动 实现 DirectWrite 使用      更新时间:2023-10-16

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

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

CreateTextLayout(...)已经maxWidthmaxHeight论点.因此,也许这可以解决仅呈现适合控制台的内容的问题。

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

总之

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

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

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

当你调用 DrawTextLayout() 时,你为函数提供了一个绘图的起点(原点)。从原点的 y 位置减去滚动 y 值...做。

如果您想了解有关字形的更多信息:-Catch22.com 有很棒但未完成的Neatpad教程使用uniscribe(恐怖的API,但它给出了DirectWrite内部如何工作的想法)

MSDN还有一个教程,介绍如何通过DirectWrite直接处理字形,以及如何使用自己的渲染器:https://msdn.microsoft.com/en-us/library/windows/desktop/dd941787%28v=vs.85%29.aspx

我希望我能提供帮助。