排序问题
我现在要对ListCtrl表中的项目进行上移(UP)和下移(down),当我选中某一项后只能移一次。比如我点选第3行并点击上移按钮,第2行和第3行进行了交换。可问题是激活行还是第3行,而不是自动跳到第2行,因此只会在第2行和第3行之间切换,即:3<->2;而不是3->2,2->1.我的代码如下:
void CStore::OnUp()
{
m_nitem = m_StoreList.GetItem();//当前所激活项目的索引,我怀疑就是这个给固定死了不能变换
int i=m_nitem;
CString no,nt;
no.Format("%d",i+1);
nt.Format("%d",i);
if(i==-1)
return;
if(i==0)
{
AfxMessageBox("已经位于第一行");
return;
}
CString name,ip;
name=RWini("cam.ini",no,"cam",name,true);//读取第i+1行摄象机配置
ip =RWini("cam.ini",no,"ip",ip,true);
cam[i].cam=RWini("cam.ini",nt,"cam",cam[i].cam,true);//读取第i行摄象机配置
cam[i].ip=RWini("cam.ini",nt,"ip",cam[i].ip,true);
RWini("cam.ini",no,"cam",cam[i].cam,false);//写入.ini文件时把第i行摄象机数据与第i+1行摄象机切换
RWini("cam.ini",no,"ip",cam[i].ip,false);
RWini("cam.ini",nt,"cam",name,false);//保存
RWini("cam.ini",nt,"ip",ip,false);
cam[i].cam=RWini("cam.ini",nt,"cam",cam[i].cam,true);//读出第i台数据
cam[i].ip=RWini("cam.ini",nt,"ip",cam[i].ip,true);
cam[i+1].cam=RWini("cam.ini",no,"cam",cam[i+1].cam,true);//读出第i+1台
cam[i+1].ip=RWini("cam.ini",no,"ip",cam[i+1].ip,true);
m_StoreList.SetItemText(i-1, 1, cam[i].cam); //显示第i台
m_StoreList.SetItemText(i-1, 2, cam[i].ip);
m_StoreList.SetItemText(i,1,cam[i+1].cam);//显示第i+1台
m_StoreList.SetItemText(i,2,cam[i+1].ip);
}
这个函数有点问题,因为文件的频繁读写把系统资源给耗了不少。哪位有更高明的排序方法请赐教。