CListCtrl的数据更新.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CListCtrl的数据更新

关于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 04.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 szText[128] = {0}; if (pItem-mask LVIF_TEXT) { //使缓冲区数据与表格子项对应 //m_ArrayBuff为二维数组 //定义如下 int m_ArrayBuff[2048][4]; _stprintf(szText,_T(“%d”),m_ArrayBuff[pItem-iItem][pItem-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_ArrayBuff[i][k] = rand() 48 + 1; } } if (nItemCount 2) m_ctlList.SetItemCountEx(1); else m_ctlList.SetItemCountEx(nItemCount); m_ctlList.Invalidate(); } 若要修改数据,只要修改缓冲区m_ArrayBuff的数据即可以 5.Custom Redraw 参考适用范围:数据不是很多,而且用SetItemText修改Item的某一列的数据的时候。 既然是自绘,首先当然是重载CListCtrl类,并接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理 BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC) { //响应WM_ERASEBKGND消息 return false; //屏蔽默认处理 //return CListCtrl::OnEraseBkgnd(pDC); } void CListCtrlEx::OnPaint() { //响应WM_PAINT消息 CPaintDC dc(this); // device context for painting CRect rect; CRect headerRect; CDC MenDC;//内存ID表 CBitmap MemMap; GetClientRect(rect); GetDlgItem(0)-GetWindowRect(headerRect); MenDC.CreateCompatibleDC(dc); MemMap.CreateCompatibleBitmap(dc,re

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档