如何在重新填充项目后防止CListCtrl中的垂直滚动条闪烁

时间:2015-07-28 05:23:57

标签: c++ windows winapi mfc clistctrl

我的目标是以1秒的频率重新绘制我的MFC应用中的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));

除非垂直滚动条在使用此方法时闪烁或快速上下跳动,否则效果很好。

我能做些什么来防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

两件事:

  • 避免不必要地更新列表框。这不仅浪费时间,而且会干扰用户尝试从中选择一些东西。尽量只在必要时更新这些元素。
  • 查看LockWindowUpdate()。编写一个RAII助手,在重新填充时锁定列表框。确保检查呼叫结果,并且只有在第一次呼叫成功时才在dtor中将其反转,以免干扰嵌套呼叫。