排序问题

fjl1210 2005-04-28 02:01:08
我现在要对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);
}

这个函数有点问题,因为文件的频繁读写把系统资源给耗了不少。哪位有更高明的排序方法请赐教。
...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjl1210 2005-04-28
  • 打赏
  • 举报
回复
我现在要对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,name1,ip2;

name=RWini("cam.ini",no,"cam",name,true);//读取第i行摄象机
ip =RWini("cam.ini",no,"ip",ip,true);

name1=RWini("cam.ini",nt,"cam",name1,true);//读取第i-1行摄象机
ip2=RWini("cam.ini",nt,"ip",ip2,true);

RWini("cam.ini",no,"cam",name1,false);//把第i-1行数据写入第i行
RWini("cam.ini",no,"ip",ip2,false);

RWini("cam.ini",nt,"cam",name,false);//把第i行数据写入i-1行
RWini("cam.ini",nt,"ip",ip,false);

m_StoreList.SetItemText(i-1, 1, name); //显示第i-1行数据
m_StoreList.SetItemText(i-1, 2, ip);

m_StoreList.SetItemText(i,1,name1);//显示第i行数据
m_StoreList.SetItemText(i,2,ip2);

}
这个函数有点问题,因为文件的频繁读写把系统资源给耗了不少。哪位有更高明的排序方法请赐教。
刚才改了一下有点好转,但就是不能连续排序。真郁闷

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧