在ListCtrl中进行排序

2016-02-19 14:28 1 1 收藏

下面是个超简单的在ListCtrl中进行排序教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

  列表控件(CListCtrl)的顶部有一排按钮,用户可以通过选择不同的列来对记录进行排序。但是 CListCtrl并没有自动排序的功能,我们需要自己添加一个用于排序的回调函数来比较两个数据的大小,此外还需要响应排序按钮被点击的消息。下面讲述一下具体的做法。

  CListCtrl提供了用于排序的函数,函数原型为:BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData )。其中第一个参数为全局排序函数的地址,第二个参数为用户数据,你可以根据你的需要传递一个数据或是指针。该函数返回-1代表第一项排应在第二项前面,返回1代表第一项排应在第二项后面,返回0代表两项相等。

  用于排序的函数原形为:int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort),其中第三个参数为调用者传递的数据(即调用SortItems时的第二个参数dwData)。第一和第二个参数为用于比较的两项的ItemData,你可以通过DWORD CListCtrl::GetItemData( int nItem )/BOOL CListCtrl::SetItemData( int nItem, DWORD dwData )来对每一项的ItemData进行存取。在添加项时选用特定的CListCtrl::InsertItem也可以设置该值。由于你在排序时只能通过该值来确定项的位置所以你应该比较明确的确定该值的含义。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  最后一点,我们需要知道什么时候需要排序,实现这点可以在父窗口中对LVN_COLUMNCLICK消息进行处理来实现。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  下面我们看一个例子,这个例子是一个派生类,并支持顺序/倒序两种方式排序。为了简单我对全局数据进行排序,而在实际应用中会有多组需要排序的数据,所以需要通过传递参数的方式来告诉派序函数需要对什么数据进行排序。

  //全局数据
  struct DEMO_DATA
  {
     char szName[20];
     int iAge;
  }strAllData[5]={{"王某",30},{"张某",40},{"武某",32},{"陈某",20},{"李某",36}};

  //CListCtrl派生类定义
  class CSortList : public CListCtrl
  {
  // Construction
  public:
   CSortList();
   BOOL m_fAsc;//是否顺序排序
   int m_nSortedCol;//当前排序的列
  protected:
   //{{AFX_MSG(CSortList)
   /

来源:https://www.tulaoshi.com/n/20160219/1607019.html

延伸阅读
标签: 办公软件
大家都知道在Word中有这样一个技巧,那就是在移动图形等元素时,按住Alt键可以对元素的位置进行微调。 但现在还有一个一劳永逸的方法,可以在调整元素位置时,只使用键盘上的方向键,不用按任何辅助键,就可以随心所欲地进行,方法如下:在工具栏的空白处单击鼠标右键,在快捷菜单中选择“绘图”,调处“绘图”工具栏,(如图1)所示。通常“...
标签: 浏览器
如何在火狐中进行支付   现在已有许多支付产品与支付方式,都能帮助大家在火狐浏览器中轻松进行网购支付。小编带领大家一起来体验一下两种比较常用的在线支付产品:支付宝快捷支付与财付通一点通。 体验一:使用支付宝的快捷支付功能 现在支付宝提供的快捷支付功能,能支持绝大部分银行的储蓄卡与信用卡,通过和支付宝绑定...
这是一篇新写的教程,首发Blueidea,最近很忙,这篇教程写好后也搁置两三天了,不过由于之前已经整理好了,发上来也只是Copy Paste的事情 ^_^ 使用Fireworks(以下简称FW)进行 图标设计 主要要留意两点: 一是FW专注于web设计,不适合创造一些过于复杂的PS效果,请期待FW CS5的PS滤镜; 二是FW的编辑方式类似于AI,如果您习惯于工作在PS类的像...
标签: PHP
  因为证书中有中文,所以需要在PHP中进行GB2312与UTF-8的互换。 网上搜索一下这方面相关资料,说是需要php_iconv.dll的支持,可是我在PHP5文件夹中根本找不到这个文件,但是奇怪的是在PHP4中有这个,然后我将PHP4中的php_iconv.dll文件,复制到system32下,却提示出现错误,我想应该也不行,毕竟PHP4和PHP5里面的文件应该不兼容。到这里...
标签: PHP
  <? if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=请输入你的用户名和密码:"); Header("HTTP/1.0 401 Unauthorized"); echo "验证失败,你不能网络资源!"; exit; } else { if ($PHP_AUTH_USER!="username" or $PHP_AUTH_PW!="password") { ...

经验教程

101

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部