资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法(转)(2011-10-23 22:08:48)转载标签:杂谈分类:C 学习 1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘m_ctlList.SetRedraw(FALSE);/以下为更新数据操作/恢复窗口重绘m_ctlList.SetRedraw(TRUE);2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘m_ctlList.LockWindowUpdate();/以下为更新数据操作/恢复窗口重绘m_ctlList.UnlockWindowUpdate();3.使用ListCtrl的内部双缓冲m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER);VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:#define LVS_EX_DOUBLEBUFFER 0000100004.Virtual List首先要设置ListCtrl风格为LVS_REPORT | LVS_OWNERDATA或在ListCtrl属里中的More Styles页面中选中Owner data复选框。其次要向应LVN_GETDISPINFO消息;void OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;LV_ITEM *pItem = &(pDispInfo)-item;char szText128 = 0;if (pItem-mask & LVIF_TEXT)/使缓冲区数据与表格子项对应/m_ArrayBuff为二维数组/定义如下 int m_ArrayBuff20484;_stprintf(szText,_T(“%d”),m_ArrayBuffpItem-iItempItem-iSubItem);pItem-pszText = szText;*pResult = 0;最后便是生成缓冲区数据void Insertdata()/删除之前的数据m_ctlList.SetItemCountEx(0);m_ctlList.Invalidate();m_ctlList.UpdateWindow();srand( (unsigned)time( NULL );/生成新的数据缓冲区int nItemCount = 2048;for (int i = 0;i nItemCount; i +)for (int k = 0;k 4;k +)m_ArrayBuffik = rand() 48 + 1;if (nItemCount GetWindowRect(&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的背景色/这一句是调用默认的OnPaint(),把图形画在内存DC表上DefWindowProc(WM_PAINT,(WPARAM)MenDC.m_hDC,(LPARAM)0);/输出dc.BitBlt(0,headerRect.Height(),rect.Width(), rect.Height(),&MenDC,0, headerRect.Height(),SRCCOPY);MenDC.DeleteDC();MemMap.DeleteObject();
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号