10.VC(custom)- CListCtrl插入大数据量时避免闪烁的有效方法

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为按钮函数,可以明显感觉到,后者在按钮按下去后

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

 

你可能感兴趣的:(测试,application)