zoukankan      html  css  js  c++  java
  • List控件排序,别处看到的,记下来

    先在.cpp文件的上面定义几个全局变量

    BOOL m_bAsc1;//是否顺序排序
    int m_nSortedCol1;//当前排序的列
    static int CALLBACK SortLVProc1(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);排序函数
    
    static int CALLBACK SortLVProc1(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
    {
       CListCtrl *pList=(CListCtrl*)lParamSort;
    int nItem1,nItem2;
    LVFINDINFO FindInfo;
    FindInfo.flags=LVFI_PARAM;
    FindInfo.lParam=lParam1;
    nItem1=pList->FindItem(&FindInfo,-1);
    FindInfo.lParam=lParam2;
    nItem2=pList->FindItem(&FindInfo,-1);
    if((nItem1==-1)||(nItem2==-1))
    {
       return 0;
    }
    CString str1,str2;
    str1=pList->GetItemText(nItem1,m_nSortedCol1);
    str2=pList->GetItemText(nItem2,m_nSortedCol1);
    HDITEM headerItem;
    headerItem.mask = HDI_LPARAM;
    CHeaderCtrl* pHeaderCtrl = pList->GetHeaderCtrl( );
    pHeaderCtrl->GetItem( m_nSortedCol1, &headerItem );
    UINT nType = (UINT)(headerItem.lParam);
    int iCompRes = 0;
    switch( nType )
    {
    case INT_TYPE:
       {
        int i1,i2;
        i1 = atoi( str1 );
        i2 = atoi( str2 );
        if( i1 > i2)
         iCompRes = 1;
        else if( i1 == i2 )
         iCompRes = 0;
        else
         iCompRes = -1;
       }
       break;
    case DOUBLE_TYPE:
       {
        double i1,i2;
        i1 = atof( str1 );
        i2 = atof( str2 );
        if( i1 > i2)
         iCompRes = 1;
        else if( i1 == i2 )
         iCompRes = 0;
        else
         iCompRes = -1;
       }
       break;
    case STRING_TYPE:
    default:
       {
        if( str1 > str2)
         iCompRes = 1;
        else if( str1 == str2 )
         iCompRes = 0;
        else
         iCompRes = -1;
       }
       break;
    }
    if(m_bAsc1)
      return iCompRes;
    else
       return iCompRes*-1;
    return 0;
    }


    这个排序函数的有点在于他对要排序的变量包括的很全,有int ,cstring,double型的,这是在.h文件的函数体外定义的:enum { INT_TYPE = 0, STRING_TYPE, DOUBLE_TYPE };
    最后加一个单击表头的消息响应函数 ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnLvnColumnclickList1)

    void CGAMEFAST::OnLvnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
    {
    LPNMLISTVIEW pNMListView = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    
    if(pNMListView->iSubItem==m_nSortedCol1)
          m_bAsc1=!m_bAsc1;
    else
    {
        m_bAsc1=true;
        m_nSortedCol1=pNMListView->iSubItem;
    }
    
    int    i=m_MyList.GetItemCount();                //   这两句函数是关键哦。。。。
        while(i--)m_MyList.SetItemData(i,i);  
    
    m_MyList.SortItems(SortLVProc1,(DWORD)&m_MyList);
    *pResult = 0;
    
    }


    把控件变量名改成你的控件变量就可以了!上面标着关键的那两句就是关键

  • 相关阅读:
    Apache Tomcat Ajp CVE-2020-1938漏洞复现
    关于JDK高版本下RMI、LDAP+JNDI bypass的一点笔记
    javaweb-codereview 学习记录-5
    java 动态代理机制
    关于<Java 中 RMI、JNDI、LDAP、JRMP、JMX、JMS那些事儿(上)>看后的一些总结-2
    关于<Java 中 RMI、JNDI、LDAP、JRMP、JMX、JMS那些事儿(上)>看后的一些总结-1
    javaweb-codereview 学习记录-4
    从0到1掌握某Json-TemplatesImpl链与ysoserial-jdk7u21的前因后果
    javaweb-codereview 学习记录-2
    javaweb-codereview 学习记录-1
  • 原文地址:https://www.cnblogs.com/nkzhangkun/p/3490002.html
Copyright © 2011-2022 走看看