程序中使用了列表框,由于对显示效率重绘速度的需求,在网上找了虚列表的教程,并做了如下操作1,将列表控件属性改为
2,定义了一个全局的CString m_mlistdata[3000][3000];及相关变量用于测试,设置了如下的测试用按钮
3,对LVN_GETDISPINFO(虚列表请求数据消息)进行响应,但是调试时发现,当列表框内的数据需要重绘的时候,序列表请求数据并不像教程上说的那样只请求需要显示的数据进行重绘。举个例子,假如虚列表中总共需要显示的数据是100行100列,但是列表框可见区域内只能显示前10行和前10列,这个时候我拖动了一下滚动条,列表框需要显示前10行和第2列到第11列的内容,正常来讲列表框如果只请求前10行和第2列到第11列的内容就可以高效的重绘了,但是实际发现重绘效率非常低,调试时发现列表框重绘时请求整个100行100列的数据,也就是说我拖动滚动条之后至少会收到10000次LVN_GETDISPINFO,于是添加了限制代码,目前LVN_GETDISPINFO响应函数如下这样对行进行了限制,每次只重绘需要显示的行,但是重绘速度还是不够快4,我的问题是,如果我虚列表的使用没有错误,以当前的重绘方式,如何才能限制每行绘制的项数,即每行重绘的时候只重绘需要显示的那几项,用上面的例子讲就是只重绘可以显示的那10*10个格子?如果我虚列表使用的有问题,是哪里出了问题?控件CListctrl重绘