使用DirectWrite实现滚动文本

时间:2015-01-30 20:22:16

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

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

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

CreateTextLayout(...)已经接受了参数maxWidthmaxHeight。因此,这可能会解决仅渲染适合控制台的问题。

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

简而言之

  1. CreateTextLayout(...)是否会为我处理“仅渲染可见部分”?
  2. 如何添加滚动部分?
  3. 编辑:更改了标题,因为它并没有真正总结这个问题。

1 个答案:

答案 0 :(得分:0)

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

当您调用DrawTextLayout()时,您将为函数提供绘图的起点(原点)。从原点的y位置减去滚动y值。完成。

如果您想了解有关雕文的更多信息: -Catch22.com使用uniscribe有很好但未完成的Neatpad教程(恐怖API,但它让我们了解DirectWrite如何在内部工作)

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

我希望我能提供帮助。