从优快云好友博客上挖掘的知识,自己学习兼测试了下,笔记于下:
LockWindowUpdate:
Disables drawing in the given window,锁定指定窗口,禁止它更新。
Only one window can be locked at a time,只能有一个窗口处于锁定状态。
SetRedraw:
An application calls SetRedraw to allow changes to be redrawn or to prevent changes from being redrawn.
应用程序调用SetRedraw以允许重画变化或防止被重画。
第一步,先锁定窗口,不进行刷新
m_List.LockWindowUpdate();
第二步,设定列表不进行重画
m_List.SetRedraw(FALSE);
第三步,清空列表,删除历史数据
m_List.DeleteAllItems();
第四步,窗口解锁,允许刷新。否则系统的视图也会进行闪烁
m_List.UnlockWindowUpdate();
第五步,向列表中循环增加记录
第六步,重画列表
m_List.SetRedraw(TRUE);
示例代码:
- void XXXX::OnBnClickedButtonAdd()//一个按钮响应函数
- {
- m_List.LockWindowUpdate();
- m_List.SetRedraw(false);
- m_List.DeleteAllItems();
- m_List.UnlockWindowUpdate();
- for (int i=0 ;i<1000;i++)
- {
- CString sz;
- sz.Format(_T("新建ITEM%d"),i);
- m_List.InsertItem(0,sz) ;
- }
- m_List.SetRedraw(true);
- }
对比代码:
- void XXXX::OnBnClickedButtonAdd()
- {
- m_List.DeleteAllItems();
- for (int i=0 ;i<1000;i++)
- {
- CString sz;
- sz.Format(_T("新建ITEM%d"),i);
- m_List.InsertItem(0,sz) ;
- }
- }
OnBnClickedButtonAdd为按钮函数,可以明显感觉到,后者在按钮按下去后
有一段延时才能弹起,而前者正常。