浪迹天涯

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

大数据量下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 浪迹天涯 阅读(1134) 评论(1)  编辑 收藏 引用 所属分类: C++

评论

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

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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(22)

随笔分类(30)

随笔档案(29)

文章分类

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜