0

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

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

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

我也曾经DWRITE_PARAGRAPH_ALIGNMENT_FAR看到最新的文本行。但是如何添加额外的滚动(最好是额外的像素而不是线条,以便我可以通过一些时间控制的增量来实现平滑滚动)?

简而言之

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

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

4

1 回答 1

0

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

我希望我能帮上忙。

于 2015-02-28T14:37:54.233 回答