在头两篇中介绍了CListCtrl::SortItems() 方法的使用和其中的一个排序方法,这篇介绍另一种方法

CList 点击表头排序 (1)SortItems函数

CList 点击表头排序 (2)两种排序方法中其中一种

这种方法不在需要数据绑定,只要确定你点击的表头的第几列就行,过程与第一种是一样的,同样需要SortItems()方法,但是你可以把SetItemDate用在更加有用的地方

(1)同样响应消息函数我就不写了

(2)实现消息函数

void CFinishWellToFind::OnLvnColumnclickListFinishWell(NMHDR *pNMHDR, LRESULT *pResult)
{

 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
 // TODO: Add your control notification handler code here
 HDITEM hdrItem; 
 static int sSortColumn = 0;
 m_ListCtrl.GetHeaderCtrl()->GetItem(sSortColumn, &hdrItem);
 MyData *tmpp=new MyData;
 tmpp->listctrl=&m_ListCtrl;
 tmpp->isub=pNMListView->iItem;
 int sortnum=(int)GetProp(m_ListCtrl.GetSafeHwnd(),L"SORT_COLUMN");
 int sortasc=(int)GetProp(m_ListCtrl.GetSafeHwnd(),L"SORT_DIRECTION");
 if(sortnum==pNMListView->iSubItem){
  sortasc=(sortasc+1)%2;
  SetProp(m_ListCtrl.GetSafeHwnd(),L"SORT_DIRECTION",(HANDLE)sortasc);
 }
 SetProp(m_ListCtrl.GetSafeHwnd(),L"SORT_COLUMN",(HANDLE)pNMListView->iSubItem);
 tmpp->seq=sortasc;
 m_ListCtrl.SortItems(CompareFunc,(LPARAM)tmpp);
 *pResult = 0;

}

(3)实现内容排序函数

int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
 MyData *p=(MyData *)lParamSort;
 CListCtrl* list =p->listctrl;
 int isub=p->isub;
 LVFINDINFO findInfo;
 findInfo.flags = LVFI_PARAM;
 findInfo.lParam = lParam1;
 int iItem1 = list->FindItem(&findInfo, -1);
 findInfo.lParam = lParam2;
 int iItem2 = list->FindItem(&findInfo, -1);
 CString strItem1 =list->GetItemText(iItem1,isub);
 CString strItem2 =list->GetItemText(iItem2,isub);
 if(p->seq)
  return wcscmp(strItem2, strItem1);
 else
  return -wcscmp(strItem2, strItem1);
}

这种排序只要能明确你点击的是哪列就可以进行排序,但是原理都大同小异

  ListCtrl排序到这里就结束,以后如果我发现更好的排序方法我会继续补充

CList 点击表头排序 (3)两种排序的第二种的更多相关文章

  1. CList 点击表头排序 (2)两种排序方法中其中一种

    上一篇讲解SortItem()方法如何使用,虽然都是抄别人的但是就是想让大家有个大概的了解 CList 点击表头排序 (1)SortItems函数 点击表头排序基本思路都是 1.首先响应HDN_ITE ...

  2. CList 点击表头排序 (1)SortItems函数

    点击表头排序整体的思路都是去 CListCtrl类中的方法SortItems去实现 CListCtrl::SortItems的原型是: BOOL SortItems( PFNLVCOMPARE pfn ...

  3. 解决Geoserver请求跨域的几种思路,第二种思路用过

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景描述 跨域问题是浏览器同源安全制引起的特别常见的问题.不同前端语 ...

  4. 非常强大的table根据表头排序,点击表头名称,对其内容排序

    js代码: /** * 通过表头对表列进行排序 * * @param sTableID * 要处理的表ID<table id=''> * @param iCol * 字段列id eg: 0 ...

  5. C#根据字体名通过注册表获取该字体文件路径(win10)两种方法推荐第二种

    方法一: 直接先上源码: private System.Collections.Generic.SortedDictionary<string, string> ReadFontInfor ...

  6. ASP.NET MVC 下拉框的传值的两种方式(第二种方式未完成)

    控制器代码: public ActionResult Index() { List<SelectListItem> sli = new List<SelectListItem> ...

  7. word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建   (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...

  8. H5 video标签的第二种格式

    36-video标签的第二种格式 2.第二种格式存在的意义: 由于视频数据非常非常的重要, 所以五大浏览器厂商都不愿意支持别人的视频格式, 所以导致了没有一种视频格式是所有浏览器都支持的 这个时候W3 ...

  9. QT中Qtableview视图表格中点击表头进行排序

    用QT写了一个小工具,主要是对Excel中大量的数据进行计算和显示. 写了有一段时间,然后断断续续的做一些修改和完善. 因为要显示的数据有多列,很自然的会想到要能够对显示的数据进行排序.如果直接操作m ...

随机推荐

  1. Please ensure that adb is correctly located at &#39;D:\Android\android-sdk\platform-tools\adb.exe&#39; and

    1.启动任务管理器 2.找到百度安全组件杀掉进程. 3.一般都是组件给禁止了.

  2. Go 编码问题的解决方案

    1.首先需要mahonia 这个包 go get github.com/axgle/mahonia 然后新建一个 func src 字符串 srcCode 字符串当前编码 tagCode 要转换的编码 ...

  3. PHP解析XML格式文档

    <?php// 首先要建一个DOMDocument对象$xml = new DOMDocument();// 加载Xml文件$xml->load("3.xml");// ...

  4. Android Studio使用Mob来获取手机验证码加上倒计时

    再根据上编的基础上再添加倒计时即可 添加一个类TimeCountUtil package zhu.com.yzm4; import android.os.CountDownTimer; import ...

  5. C - The C Answer (2nd Edition) - Exercise 1-4

    /* Write a program to print the corresponding Celsius to Fahrenheit table. */ #include <stdio.h&g ...

  6. sqoop 1.4.4-cdh5.1.2高速入门

    一.高速入门 (一)下载安装 1.下载并解压 wget http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.4-cdh5.1.2.tar.gz tar - ...

  7. Unix/Linux环境C编程新手教程(37) shell经常使用命令演练

     cat命令 cat命令能够用来查看文件内容. cat [參数] 文件名称. grep-指定文件里搜索指定字符内容. Linux的文件夹或文件. -path '字串' 查找路径名匹配所给字串的全部 ...

  8. js防止提交数据之后的按钮连击

    js防止提交数据之后的按钮连击 一.实例描述 当页面提交的数据特别多时,页面会反应比较迟钝,此时如果用户等不及而连续单击按钮,导致数据重复提交.本案例就是为了防止数据重复提交. 二.截图 三.代码 & ...

  9. Python print 语句(Python 2 与 Python 3)

    1. python 3.x 中的 print print 在 Python 3.x 的环境里是内置函数(built-in function): python 3 的 print 语句支持(python ...

  10. js --- 事件流

    1.事件流 事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即DOM事件流. 2.两种事件流模型 1.冒泡型事件流:事件的传播是从最特定的事件目标 ...