【问题标题】:How to Scroll CEdit(MFC) smoothly如何平滑滚动 CEdit(MFC)
【发布时间】:2013-10-14 10:28:25
【问题描述】:

我想要一个多行 CEdit 控件像滚动字幕一样缓慢地向下滚动。

到目前为止,我在 OnTimer() 事件中使用 CEdit::LineScroll()。它可以进行全线滚动,但不如我预期的那么流畅。 我尝试用 ScrollWindow() 替换 LineScroll() 以便我可以按像素滚动文本,但是 ScrollWindow() 函数不会绘制应该滚动到控件中的新文本行。

有人知道如何实现这一目标吗?

如果我没有清楚地描述问题。我添加了这些 GIF: LineScroll() 做了什么(我只需要它更流畅):

这就是 ScrollWindow() 的作用(以下文字被剪掉):

这是ScrollWindow()的代码:

CRect clientRect;
m_editAns.GetClientRect(&clientRect);
m_editAns.ScrollWindow(0, -10, NULL, &clientRect);
m_editAns.UpdateWindow();
ValidateRect(&clientRect);

*PS:该项目在其他地方使用 CEdit 控件,因此我无法用另一个控件替换它,尽管继承是可以接受的。

【问题讨论】:

    标签: mfc scroll cedit


    【解决方案1】:

    根据CWnd::ScrollWindow

    要在滚动完成的同时重新绘制未覆盖的区域, 致电后立即致电UpdateWindow member function 滚动窗口。

    【讨论】:

    • 这是我在 OnTimer() 中的代码:m_editCtrl.ScrollWindow(0,-10,NULL,&clientRect); m_editCtrl.UpdateWindow(); 同样的问题,没有显示新行。
    • 你能试试不使用剪切矩形m_editCtrl.ScrollWindow(0, -10, NULL, NULL)吗?
    • 如果 UpdateWindow 不会导致重绘,您可能需要先使用 InvalidateRect 使未覆盖区域无效。
    • 我只能想到一件事——您是否在代码中处理 WM_PAINT 消息?会不会是编辑重绘被跳过了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多