使用DirectWrite实现滚动文本
Realising scrolling text with DirectWrite
>我有一个字符串来存储所有类型的记录数据。此数据应可通过控制台访问。控制台当然只有有限的高度。因此,我不需要渲染整个文本,而只需要呈现可见的内容。为此,我有一个变量,用于存储用户向上滚动的文本底部(最新)端的像素数。现在我想我需要的是一种方法来找出我的文本的哪个部分适合我的控制台,以及如何告诉 DirectWrite 只呈现它。
到目前为止我做了什么:现在我正在使用CreateTextLayout(...)
和DrawTextLayout(...)
来绘制完整的文本(现在只是一个小的测试文本),而没有滚动功能。
CreateTextLayout(...)
已经maxWidth
和maxHeight
论点.因此,也许这可以解决仅呈现适合控制台的内容的问题。
我还使用DWRITE_PARAGRAPH_ALIGNMENT_FAR
使最新的文本行可见。但是如何添加额外的滚动(最好是附加像素而不是线条的形式,以便我可以通过一些时间控制的增量实现平滑滚动)?
总之
CreateTextLayout(...)
是否为我处理"仅渲染可见部分"?- 如何包含滚动部分?
编辑:更改了标题,因为它并没有很好地总结问题。
文本布局是文本的内部表示形式。把它想象成一组图片(字形)代表每个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
我希望我能提供帮助。
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 使用一个考虑到std::map中键值的滚动或换行的键
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- GTKMM 文本视图 epands 而不是滚动
- 在C++的“编辑”文本框中禁用文本编辑,同时保持启用滚动
- 如何在Qt中将文本附加到QPlainTextEdit并保持滚动条稳定?
- 如何在不添加换行符的情况下将文本附加到QPlainTextEdit,并保持滚动在底部
- 使用DirectWrite实现滚动文本
- Qt - 无效使用不完整的类型 'class QScrollBar' - 为文本编辑小部件添加水平滚动条
- Win32滚动条剪辑文本
- 滚动输出的文本差异