分类:
2008-09-17 11:11:40
()
- ()
-- ()
[求助] CListCtrl问题
把CListCtrl控件设置为Report View,
在列表中增加纪录,如何实现新增加的纪录显示在当前行,旧纪录向上移的功能。
请高手指点一下
据我的了解是好象没有一个函数可以实现,你可以自己编个:
int nIndex = listCtrl.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if(nIndex == -1)
return ; //得到当前行。
for(int i =1;i<=nIndex - 1; i++ )
{
listCtrl.SetItemText(i-1,listCtrl.GetItemText(i));
}//将当前行的数据上移(第0行数据没了)
listCtrl.SetItemText(nIndex,插入的数据);//在当前插入数据。
//伪语言写的啊!!
上移的数据没有了,不能满足我的要求。
那你想怎么样。。。原来有nIndex行数据,现在上移了,肯定少一行,要不插在哪。。。程序是死的!它只会按我们预先设计好的路径工作。你的思路都不明确,还要程序自己想吗?电脑只是运算速度快点而已!对多一行的数据可以有很多方法,比如插在结尾。。。看你的要求了,你只要求插入数据时,旧数据上移,那程序就会按这条路径跑,它不会自己对多出的数据处理的。自己没有考虑完善,结果出来了,又说这说那!
参考下面的语句去做吧!
listCtrl.SetItemText(nItem, nSubItem, strText);
listCtrl.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
listCtrl.SetFocus();
listCtrl.EnsureVisible(nItem, TRUE);
listCtrl.RedrawWindow();
取消ListCtrl的Sort属性,用InsertItem()增加一行,然后用SetItemText写入你要写的内容,注意得记住插入时的行号,然后调用SetFocus()就可以了。
楼上的方法试了都不行。再说明一下:
在列表中有多条记录,一屏不能完全显示,要用垂直滚动条来滚动纪录。
如果想将第1000行纪录显示在列表的第一行或者最后一行。
就需要程序来控制垂直滚动条。怎样实现?
全部时间均为北京时间. 现在时间是14:32 . |
Powered by: vBulletin Version 2.2.8
Translated and hacked by:
Copyright © Jelsoft Enterprises Limited 2000, 2001.