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