CListCtrl插入大数据量时避免闪烁的有效方法

从CSDN好友博客上挖掘的知识,自己学习兼测试了下,笔记于下:
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);

示例代码:

[cpp]  view plain copy
  1. void XXXX::OnBnClickedButtonAdd()//一个按钮响应函数  
  2. {  
  3.     m_List.LockWindowUpdate();  
  4.     m_List.SetRedraw(false);  
  5.     m_List.DeleteAllItems();  
  6.     m_List.UnlockWindowUpdate();  
  7.     for (int i=0 ;i<1000;i++)  
  8.     {  
  9.         CString sz;  
  10.         sz.Format(_T("新建ITEM%d"),i);  
  11.         m_List.InsertItem(0,sz) ;  
  12.     }  
  13.     m_List.SetRedraw(true);  
  14.       
  15. }  

对比代码:

[cpp]  view plain copy
  1. void XXXX::OnBnClickedButtonAdd()  
  2. {  
  3.     m_List.DeleteAllItems();  
  4.     for (int i=0 ;i<1000;i++)  
  5.     {  
  6.         CString sz;  
  7.         sz.Format(_T("新建ITEM%d"),i);  
  8.         m_List.InsertItem(0,sz) ;  
  9.     }  
  10. }  

 

OnBnClickedButtonAdd为按钮函数,可以明显感觉到,后者在按钮按下去后

有一段延时才能弹起,而前者正常。





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值