我有大量的数据要插入
首先,在线程中插入的方法是好的,但不需要发送消息执行更新;
如果插入位置是不确定的,而且希望显示插入的条目,可以发送滚动消息:
ctrl.PostMessage(WM_VSCROLL,SB_LINEUP,0);
其中的参数SB_LINEUP有一组不同的值,用来决定滚动方式
好像ListView有一种Virtual模式,可以在需要显示的时候再载如对应的Item,不需要一次性全部载入,你可以使用Virtual模式,不需要多线程处理
有一个想法,仅供参考:
1、其实用户看到是不是当前插入的记录用户是感觉不到的,所以不如显示稍微滞后插入操作,即当前用户看到的实际上不是最新的,而是倒数第二或者第三条;
2、显示命令可以用BOOL EnsureVisible( int nItem, BOOL bPartialOK );,这个可能效率高些;
3、两个操作可以用两个线程,各做各事
不知道能否实现,呵呵
调用InsertItem后listview应该已经重绘了,没必要自己再刷新一边
因为你调用的是图(可能是绘图影响了速度),最好把重绘关掉,这样快点
添加线程:
//关掉后,调用InsertItem不会重绘控件
listview.Redraw(FALSE);
......
for()InsertItem
......
重绘一边
listview.Redraw(TRUE);
1 virtual 模式
2 缓存的图片格式应该是转成需要的大小的BMP
Command what is yours
Conquer what is not