我在定时器里刷新我的CListCtrl,但是随着程序运行时间的累加,CListCtrl刷新的闪动越来越厉害,请问是什么原因?有什么办法可以解决CListCtrl的刷新闪动问题。谢谢
解决方案 »
- 我要升星星~~~~~~~~~~~~谁有我回的都给我结贴啊~~~~~~还差200多~~~~~~~
- 有在郑州的兄弟没有?
- 关于用mfc生成的程序,插入ole文档的两个问题
- MFC ActiveX控件导出的函数放到web,客户机找不到导出函数,为什么?
- 我有一个VC6程序原来连access没错,然后改为sql server 2000就不能Select值了???
- 我是一名VC初学者,如果在向导中选择了Dialog如何在Dialog中添加工具栏?
- COM高手,帮忙吧 && 来拿分!感激&报酬!!!事件问题
- 哪有《Inside COM》或《Essential COM》的英文版本
- 如何在没有支持MFC类的程序中使用CSstring这个类呢?需要引用什么头文件?
- 务实的题目没人进来 ,什么学历呀、开发工具的争论却热火朝天,CSDN怎么了? Chinese Programmer 怎么了?编程用得着那么好的口才吗?放300分!以泄心中不快
- MFC 窗体打点绘图
- 保存网页图片问题
1.我并没有大量是数据更新,只有5行5列数据,而且我没有用DeleteAllItems(),而用的是SetItemText()
2.只是在更新数据时判断了一下,数据是否需要更新,这其中进行了链表的遍历,所以可能消耗了一定的时间
3.我用的是从VCKBASE上下载的一个CListCtrl控件,不知道控件本身会不会对闪动造成影响
调用 SetRedraw( FALSE ) 关闭界面刷新数据更新完之后再调用 SetRedraw ( TRUE );
最后调用 Invalidate
void CCMFD_Svr_MainFrameDlg::UpdateListCtrl()
{
CString sLCId;
CString sLCConnState;
CString sLCLastRevTime;
CString sDataAmount;
CString sLCIP;
try
{
m_ListCtrl.SetRedraw(FALSE); POSITION pos = theApp.m_DataHandler.m_DataProcess.m_LCInfoList.GetHeadPosition();
int i=0;
while(pos != NULL)
{
STLCInfo *LCInfo = theApp.m_DataHandler.m_DataProcess.m_LCInfoList.GetNext(pos);
bool bLCConnect = false; int nCount = m_arraySTSocketInfo->GetSize();
for (int j=0; j<nCount; j++)
{
if(bLCConnect)
break;
STClientConnInfo *pSTSocketInfoinArray = (STClientConnInfo*)m_arraySTSocketInfo->GetAt(j);
if(strcmp(pSTSocketInfoinArray->m_cClientIPaddr,LCInfo->sLCIP)==0)
{
sLCConnState = "通讯正常";
sDataAmount.Format("%d",pSTSocketInfoinArray->m_nRecvDataAmount);
sLCIP.Format("%s",pSTSocketInfoinArray->m_cClientIPaddr);
COleDateTime LastTime(pSTSocketInfoinArray->m_tRecvLastTime);
sLCLastRevTime = LastTime.Format(_T("%H:%M:%S"));
m_ListCtrl.SetItemTextColor(1,i,RGB(0,0,255));
m_ListCtrl.SetItemText(i,1,sLCConnState);
m_ListCtrl.SetItemText(i,3,sDataAmount);
m_ListCtrl.SetItemText(i,4,sLCLastRevTime);
bLCConnect = true;
}
}
if(!bLCConnect)
{
sLCConnState = "通讯中断";
m_ListCtrl.SetItemTextColor(1,i,RGB(0,0,255));
m_ListCtrl.SetItemText(i,1,sLCConnState);
}
//m_ListCtrl.SetItemTextColor(0,i,RGB(0,255,255));
i++;
}
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow(); }
catch(...)
{
m_pExceptionLog.WriteExceptionLog(-1,"CMFD_Svr_MainFrame","UpdateListCtrl()","","更新界面表格异常");
}
}
...
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow();
全去掉
或者属性设置中Clip Children = true
是不是越来越大!