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

  • 相关阅读:
    运行JBoss 5.1.0 GA时出现Error installing to Instantiated:name=AttachmentStore state=Described错误的解决办法
    java中log4j的使用体验
    C#:DataTable映射成Model
    使用MyBatis搭建一个访问mysql数据库的简单示例
    netty的拆包和粘包
    netty的HelloWorld演示
    ByteBuffer详解
    汉字拼音缩写输出工具类
    mysql错误汇集
    mysql的定时任务
  • 原文地址:https://www.cnblogs.com/ye-ming/p/9262936.html
Copyright © 2011-2022 走看看