欢迎来到天天文库
浏览记录
ID:15387416
大小:28.50 KB
页数:5页
时间:2018-08-03
《clistctrl数据更新》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法(转)(2011-10-2322:08:48)转载▼标签:杂谈分类:C学习1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘m_ctlList.SetRedraw(FALSE);//以下为更新数据操作//……//恢复窗口重绘m_ctlList.SetRedraw(TRUE);2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘m_ctlList.LockWindowUpdate();//以下为更新数据操作//……//恢复
2、窗口重绘m_ctlList.UnlockWindowUpdate();3.使用ListCtrl的内部双缓冲m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()
3、LVS_EX_DOUBLEBUFFER);VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:#defineLVS_EX_DOUBLEBUFFER0×000100004.VirtualList首先要设置ListCtrl风格为LVS_REPORT
4、LVS_OWNERDATA或在ListCtrl属里中的MoreStyles页面中选中Ownerd
5、ata复选框。其次要向应LVN_GETDISPINFO消息;voidOnGetdispinfoList(NMHDR*pNMHDR,LRESULT*pResult){LV_DISPINFO*pDispInfo=(LV_DISPINFO*)pNMHDR;LV_ITEM*pItem=&(pDispInfo)->item;charszText[128]={0};if(pItem->mask&LVIF_TEXT){//使缓冲区数据与表格子项对应//m_ArrayBuff为二维数组//定义如下intm_ArrayBuff[2048][4];_stprintf(szText,_T(“%d”),m_
6、ArrayBuff[pItem->iItem][pItem->iSubItem]);pItem->pszText=szText;}*pResult=0;}最后便是生成缓冲区数据voidInsertdata(){//删除之前的数据m_ctlList.SetItemCountEx(0);m_ctlList.Invalidate();m_ctlList.UpdateWindow();srand((unsigned)time(NULL));//生成新的数据缓冲区intnItemCount=2048;for(inti=0;i7、){m_ArrayBuff[i][k]=rand()48+1;}}if(nItemCount<2)m_ctlList.SetItemCountEx(1);elsem_ctlList.SetItemCountEx(nItemCount);m_ctlList.Invalidate();}若要修改数据,只要修改缓冲区m_ArrayBuff的数据即可以5.CustomRedraw参考适用范围:数据不是很多,而且用SetItemText修改Item的某一列的数据的时候。既然是自绘,首先当然是重载CListCtrl类,并接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理BOOLCLi8、stCtrlEx::OnEraseBkgnd(CDC*pDC){//响应WM_ERASEBKGND消息returnfalse;//屏蔽默认处理//returnCListCtrl::OnEraseBkgnd(pDC);}voidCListCtrlEx::OnPaint(){//响应WM_PAINT消息CPaintDCdc(this);//devicecontextforpaintingCRectrect;CRectheaderRect;CDCMenDC;//内存ID表CBitmapMemMap;GetClientRect(&rect);GetDlgItem(0)->GetWindowR9、ect(&headerRect);MenDC.CreateCompatibleDC(&dc);MemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());MenDC.SelectObject(&MemMap);MenDC.FillSolidRect(&rect,RGB(255,255,255));//这里的RGB(255,255,255)是ListCtrl的背景色//这一句是调用默认的OnPa
7、){m_ArrayBuff[i][k]=rand()48+1;}}if(nItemCount<2)m_ctlList.SetItemCountEx(1);elsem_ctlList.SetItemCountEx(nItemCount);m_ctlList.Invalidate();}若要修改数据,只要修改缓冲区m_ArrayBuff的数据即可以5.CustomRedraw参考适用范围:数据不是很多,而且用SetItemText修改Item的某一列的数据的时候。既然是自绘,首先当然是重载CListCtrl类,并接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理BOOLCLi
8、stCtrlEx::OnEraseBkgnd(CDC*pDC){//响应WM_ERASEBKGND消息returnfalse;//屏蔽默认处理//returnCListCtrl::OnEraseBkgnd(pDC);}voidCListCtrlEx::OnPaint(){//响应WM_PAINT消息CPaintDCdc(this);//devicecontextforpaintingCRectrect;CRectheaderRect;CDCMenDC;//内存ID表CBitmapMemMap;GetClientRect(&rect);GetDlgItem(0)->GetWindowR
9、ect(&headerRect);MenDC.CreateCompatibleDC(&dc);MemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());MenDC.SelectObject(&MemMap);MenDC.FillSolidRect(&rect,RGB(255,255,255));//这里的RGB(255,255,255)是ListCtrl的背景色//这一句是调用默认的OnPa
此文档下载收益归作者所有