游戏技术文章

CMFCListCtrl控件排序

时间:2016-12-16 13:08:14  作者:棋牌资源网  来源:棋牌资源网  查看:8921  评论:0
内容摘要:项目开发工具为VS2010,对于用惯了VC6的我来说,有些新特性摸起来真有些费神。这两天为了一个数据显示列表弄得云里雾里的。背景是这样的:1、要在界面中显示数据库中数据(表格形式),每列要有标题名。2、数据库中的一个字段可能要拆分称两列进行显示。3、显示的数据要能任意列进行排序,...
项目开发工具为VS2010,对于用惯了VC6的我来说,有些新特性摸起来真有些费神。这两天为了一个数据显示列表弄得云里雾里的。

背景是这样的:

1、要在界面中显示数据库中数据(表格形式),每列要有标题名。

2、数据库中的一个字段可能要拆分称两列进行显示。

3、显示的数据要能任意列进行排序,每列的数据可能有重复值。

因此,我使用了“列表”控件。后来听说VS2010中有个CMFCListCtrl的类用起来要比CListCtrl方便。就使用了CMFCListCtrl去关联该控件。然后为了排序,重载了CMFCListCtrl的OnCompareItems()函数,在该函数中添加了同列两项值的大小比较算法,并根据比较结果返回(1/0/-1)。当我惊叹于MFC的进化时,麻烦开始了。发现排序对于有重复值的列并不是准确的,总是在排了几次后就打乱了顺序。并且由此导致,两列(某一列中有重复值)交替排序不正确。

通过不懈努力,终于在坛子里搜到了答案:

要点一:添加一项的时候要使用SetItemData(i,i)绑定一个序号,该序号要唯一。

  CString str;
  str.Format(_T("%d"), i);
  m_ListDB_sblx.InsertItem(i, str);
  m_ListDB_sblx.SetItemData(i, (DWORD)i);    // 一般就设置一个唯一的值.不唯一排序可能有点乱,


要点二:重载比较函数时,要通过下面的方法才能保证正确的取出要比较的字段。


//重载的排序比较函数:用于比较两个项的大小关系
int CMFCListCtrlEx::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int iColumn)  
{
    // 取出两个比较项内容
    CString strItem1,strItem2;
    LVFINDINFO lvfi;
    lvfi.flags=LVFI_PARAM;
    lvfi.lParam=lParam1;
    strItem1 = GetItemText(FindItem(&lvfi,-1),iColumn);
    lvfi.lParam=lParam2;
    strItem2 = GetItemText(FindItem(&lvfi,-1),iColumn); 

    //第0列按整数排序
   if (iColumn == 0 )
   {
        int nItem1 = _ttoi(strItem1);
        int nItem2 = _ttoi(strItem2);

        if (nItem1 == nItem2)   
       {   
            return 0;   
       }
       else
            return(nItem1 < nItem2 ? -1 : 1);
    }
    else
    {
          //比较字符串
         int iSort = _tcsicmp(strItem1, strItem2);
         return(iSort);
    }
}

在注意了以上两点之后,控件置为"Report"类型,把控件的"Sort"属性置为"None",再设置其他属性。即可得到正确的排序结果。

标签:CMFCListCtrl控件排序 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2022 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved