浪迹天涯

唯有努力...
努力....再努力...

大数据量下CListCtrl的问题

想实现大数据量下的CListCtrl的问题:
m_num = 50;//每次获取的buffer大小
利用函数PreSetBuffer(int StartRec,int RecCount)预先准备缓冲区,在用CListCtrl的OnGetdispinfoList函数填充值。基本实现了CListCtrl的显示问题,没有重载滚动条,所以拉动滚动条时还是比较缓慢。现在的问题是,在显示数据时时不时(极少情况)的蹦出错误,跟踪调试进去发现是itemid 的值>m_buffer.size();而且m_buffer.size()不对,竟然是3,而且是首次显示,RecCount=m_nnum的情况下,十分不解!不知道是哪里出错了?

void CKSQLView::PreSetBuffer(int StartRec,int RecCount)
{
 m_start = StartRec;
 m_end   = m_start + RecCount;//区间[m_start,m_end)
 if (m_end > m_count ) m_end = m_count;
 m_buffer.erase(m_buffer.begin(),m_buffer.end());

 for (int i=m_start;i< m_end;i++)//
 {
  vector<string> vcol;
  TPI_Move(m_hSet,i+1);
  for (int j=0;j<m_arrayFieldName.GetSize();j++)
  {
   CString text=_T("");
   CString FieldName = m_arrayFieldName[j];
   int nRet = GetFieldValue(theApp.m_hTPICon, m_hSet, FieldName, text) ; 
   vcol.push_back((LPTSTR)(LPCTSTR)text);
  }
  m_buffer.push_back(vcol);
 }
}
void CKSQLView::OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
 LV_ITEM* pItem= &(pDispInfo)->item;

 int itemid = pItem->iItem;
 if (itemid >= m_end || itemid < m_start)
  PreSetBuffer((itemid/m_nnum)*m_nnum,m_nnum);

 itemid = itemid%m_nnum;
 if (pItem->mask & LVIF_TEXT)
 {
  vector<string> vcol;
  vcol = m_buffer.at(itemid);
  string text;
  if (pItem->iSubItem == 0)
  {
   TCHAR buffer[128];
   _itot(pItem->iItem+1,buffer,10);
   text = (LPTSTR)buffer;
  }
  else
   text = vcol.at(pItem->iSubItem-1);
  lstrcpyn(pItem->pszText, text.c_str(), pItem->cchTextMax); 
 }
 *pResult = 0;
}

posted on 2007-12-20 13:56 浪迹天涯 阅读(132) 评论(1)  编辑 收藏 引用 所属分类: C++

评论

# re: 大数据量下CListCtrl的问题 2008-01-24 11:35 浪迹天涯

经过仔细分析,发现CListCtrl处理过程是正确的,之所以造成size()不正确的原因,是因为 m_buffer 相邻近的变量数组越界破坏了这块内存区域,因此造成size()不正确,数据错误的情况。经过修正,问题已然解决!  回复  更多评论   


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航:




<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

宠辱不惊 看庭前花开花落;
去留无意 望天上云卷云舒.
MSN:qj-qiujian@sohu.com
近期研究
libcurl gsoap libpcap

Dict.CN 在线词典, 英语学习, 在线翻译

常用链接

留言簿(1)

随笔分类(26)

随笔档案(26)

文章分类(9)

文章档案(9)

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜