【问题标题】:How to make text scroll in an edit box?如何使文本在编辑框中滚动?
【发布时间】:2016-02-04 12:42:56
【问题描述】:

我正在使用直接 2D 和直接写入制作自定义编辑框。绘画的东西(盒子)是由直接2D完成的。我从 WM_CHAR 消息中获取输入并将其附加到字符串中。该字符串被写入框中。现在的问题是,每当文本输入超过文本框的长度时,它会自动向下滚动,现在正在输入的文本在文本框中不可见。那么如何滚动文本使其始终在文本框中。

【问题讨论】:

    标签: c++ winapi direct2d directwrite


    【解决方案1】:

    我相信您已经使用 'IDWriteTextFormat::SetTextAlignment' 使文本与布局框的中心对齐。同样,您可以使用 'IDWriteTextFormat::SetParagraphAlignment' 来控制文本的垂直对齐方式。

    但它不能做你所说的“文本总是在文本框中”。您必须更改字体大小以适应静态布局框。 “滚动”在这里帮不了你。

    【讨论】:

      【解决方案2】:

      这完全取决于您想用它做什么以及您的控件需要有多复杂。如果限制只显示单行,您可以尝试强制DWRITE_WORD_WRAPPING_NO_WRAP 换行模式。如果您希望它是多行并且只想使用单一字体,则可以计算一次行高,然后在新行显示下一行而不是当前行;与 VK_UP 类似,例如您可以向后滚动一行。关键是使用多行控件很自然地希望它以行高的倍数显示部分文本。

      在任何情况下,您都必须自己实现滚动,例如更新渲染目标,一次只显示一部分。这不是 DirectWrite 或 D2D 工作。

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多