【发布时间】:2015-10-18 12:21:06
【问题描述】:
我的目标是在我的 MFC 应用程序中以 1 秒的频率重绘 CListCtrl 以刷新其内容。我使用以下伪代码来做到这一点:
//CListCtrl lstLog;
//Prevent redrawing
lstLog.SetRedraw(FALSE);
//Remove all items
lstLog.DeleteAllItems();
for(int i = 0; i < 100; i++)
{
lstLog.InsertItem(i, str);
}
//Scroll to the bottom of the list
int scrollY = lstLog.GetItemCount() * nItemHeight;
//Allow back redrawing
lstLog.SetRedraw(TRUE);
lstLog.Scroll(CSize(0, scrollY));
除了垂直滚动条在我使用此方法时似乎闪烁或快速上下跳跃之外,此方法效果很好。
我可以做些什么来防止这种情况发生吗?
【问题讨论】:
-
在重新开启重绘之前先滚动会有帮助吗?
-
@JonathanPotter:你知道,如果我这样做,它会产生一种奇怪的效果。在第一次迭代中它滚动到底部,然后在下一次迭代中它滚动到最顶部,然后重复。我检查了
scrollY,该参数似乎没有改变。 -
只是滚动条或列表本身?
-
@JonathanPotter:整个列表以及滚动条...
-
如果从滚动量中减去 listview 控件的客户端高度会发生什么情况(从技术上讲,您向下滚动得太远了,尽管我本以为 listview 会剪切滚动但它可能正在做某事像环绕一样奇怪)。
标签: c++ windows winapi mfc clistctrl