Windows 开发界面中listview中插入大量数据,加载缓慢问题


如何实现类似于MFC中virtual list功能,初始时只加载一部分,滚动条滚动时及时加载符合索引范围的item项?

VC Windows界面开发

swim125 12 years, 8 months ago

在用2dx引擎的时候曾经写过类似的东西,换个思路,代码对滚动条进行多一点控制。

   
  int nDdisplayStartIdx_ = 0;
  
int nMmaxDisplayLines_ = 0;
int nRowsDisplayed_ = 0;
std::vector<DataType> vDatas_; //所有数据

1. 增加垂直滚动条,根据vDatas_的内容大小设定垂直滚动条高度,反映数据量大小;根据窗口高度和item高度设定nMmaxDisplayLines_;
2. 处理垂直滚动条事件,根据垂直滚动条的位置计算当前可显示的nDdisplayStartIdx_。之后调用refreshListViewItems方法更新数据显示。

   
  void refreshListViewItems()
  
{
// 清除ListView数据
nRowsDisplayed_ = 0;
for (int x=nDdisplayStartIdx_;
(nRowsDisplayed_<nMmaxDisplayLines_)&&(x<vDatas_.size());
x++){
// 根据dataIndex绑定vDatas_中数据为一个新的item
// ListView增加新建立的item
nRowsDisplayed_++;
}
// 更新listview
// 更新滚动条
}

你妹你妹囧你妹 answered 12 years, 8 months ago

Your Answer