@布赖恩河邦迪感谢怎么办获得的项目数量明确的帮助。事实上,我已经准备好了,可以通过ListView_GetCountPerPage来理解它可以完成的事情(用于列表或报告视图),并且我会用你的方式为其他人获取它,尽管我不需要ListView_ApproximateViewRect,因为我将全部准备好了解ListView的新大小。
@Lars Truijens我已经在使用LVN_ODCACHEHINT,并且虽然有关于使用它来设置缓冲区大小,但是我需要读取到SQL数据的末尾来查找最后一个项目以获取从ODBC。由于这将是填充'最终缓存'的最佳时间,所以我认为在调用LVN_ODCACHEHIN之前,我必须设置项目的数量(并因此填充缓冲区)。
我想我真正的问题是优化我认为布赖恩暗示的答案之一。废弃缓冲区和重新分配内存的开销量小于外出访问网络和执行ODBC读取的开销,有些缓冲区会使缓冲区相当小并且经常会改变它。
这是正确的吗?
我已经做了一些更多的工作,似乎认为LVN_ODCACHEHINT通常正确填充主缓冲区,并且只有在行(在报告模式下)部分可见时才会丢失。
所以我认为缓存大小的答案是:显示的项目总数加上一行显示的项目(因为在图标视图中每行有多个项目)。
然后,您将重新读取每个WM_SIZE和LVN_ODCACHEHINT的缓存(如果有不同的开始和结束项目编号)。