我正在使用直接 2D 和直接写入制作自定义编辑框。绘画的东西(盒子)是由直接2D完成的。我从 WM_CHAR 消息中获取输入并将其附加到字符串中。该字符串被写入框中。现在的问题是,每当文本输入超过文本框的长度时,它会自动向下滚动,现在正在输入的文本在文本框中不可见。那么如何滚动文本使其始终在文本框中。
问问题
651 次
2 回答
0
这完全取决于您想用它做什么以及您的控制需要多么复杂。如果限制只显示单行,您可以尝试强制DWRITE_WORD_WRAPPING_NO_WRAP
换行模式。如果您希望它是多行并且只想使用单一字体,则可以计算一次行高,然后在新行显示下一行而不是当前行;与 VK_UP 类似,例如您可以向后滚动一行。关键是使用多行控件很自然地期望它以行高的倍数显示部分文本。
在任何情况下,您都必须自己实现滚动,例如更新渲染目标,并且一次只显示其中的一部分。这不是 DirectWrite 或 D2D 工作。
于 2016-02-01T22:25:18.930 回答
0
我相信您已经使用 'IDWriteTextFormat::SetTextAlignment' 使文本与布局框的中心对齐。同样,您可以使用“IDWriteTextFormat::SetParagraphAlignment”来控制文本的垂直对齐方式。
但它不能做你所说的“文本总是在文本框中”。您必须更改字体大小以适应静态布局框。“滚动”在这里帮不了你。
于 2015-11-16T18:43:44.433 回答