zoukankan      html  css  js  c++  java
  • CList 点击表头排序 (3)两种排序的第二种

    在头两篇中介绍了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排序到这里就结束,以后如果我发现更好的排序方法我会继续补充

  • 相关阅读:
    Linux下一个patch补丁命令
    资本中国人物-金融
    深入浅出JMS(一)——JMS简要
    在JBuilder8在使用ANT
    mysql存储引擎
    Linux系统监控
    SIEM
    mysql主从数据库复制
    JVM中可生成的最大Thread数量
    磁盘IO性能监控(Linux 和 Windows)
  • 原文地址:https://www.cnblogs.com/ye-ming/p/9262936.html
Copyright © 2011-2022 走看看