我有一个存储所有类型的记录数据的字符串。这些数据应该可以通过控制台访问。控制台当然只有有限的高度。因此,我不需要渲染整个文本,只需要渲染可见的内容。为此,我有一个变量,用于存储用户向上滚动的文本底部(最近)端的像素数。现在我想我需要的是找出文本的哪一部分适合我的控制台,以及如何告诉DirectWrite只渲染它。
到目前为止我做了什么:
现在我使用CreateTextLayout(...)
和DrawTextLayout(...)
来绘制完整的文本(现在只是一个小的测试文本)而没有滚动功能。
CreateTextLayout(...)
已经接受了参数maxWidth
和maxHeight
。因此,这可能会解决仅渲染适合控制台的问题。
我还使用DWRITE_PARAGRAPH_ALIGNMENT_FAR
来显示最新的文本行。 但是如何添加额外的滚动(最好采用额外的像素而不是线条,以便通过一些时间控制的增量实现平滑滚动)?
简而言之
CreateTextLayout(...)
是否会为我处理“仅渲染可见部分”?编辑:更改了标题,因为它并没有真正总结这个问题。
答案 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
我希望我能提供帮助。