我在网上找了一个ListCtrl排序的例子,是VC6.0写的。我把它移植在2005上面就不行了,半天没搞懂。我的ListCtrl是自己重写的类。不知道哪位高手能帮我解决这个排序的问题。最好有例子。非常感谢!

解决方案 »

  1.   

    codeproject上面clistctrl的重写非常多
      

  2.   

    这个在VS2005上面控件属性里面好像有个SORT选项吧。。
      

  3.   

    struct DATA
    {
    CListCtrl *plist;
    int col;
    };bool fav=false;int CALLBACK MylistCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) 

    DATA* MyData = (DATA*)lParamSort;
    int col = MyData->col;//点击的列项传递给col,用来判断点击了第几列
    CString cstr,cstr2;
    cstr=MyData-> plist-> GetItemText((int)lParam1,col); 
    cstr2=MyData-> plist-> GetItemText((int)lParam2,col);
    char ch1[MAX_PATH],ch2[MAX_PATH];
    if(col==0)
    {
    wsprintfA(ch1, "%S",(LPCTSTR)cstr);
    wsprintfA(ch2, "%S",(LPCTSTR)cstr2);
    if(fav)
    return (atoi(ch1)-atoi(ch2));
    else
    return (atoi(ch2)-atoi(ch1));
    }
    else if(col==1)
    {
    cstr.Delete(cstr.GetLength()-1);
    cstr2.Delete(cstr2.GetLength()-1);
    wsprintfA(ch1, "%S",(LPCTSTR)cstr);
    wsprintfA(ch2, "%S",(LPCTSTR)cstr2);
    if(fav)
    return (int)(100*(atof(ch1)-atof(ch2)));
    else
    return (int)(100*(atof(ch2)-atof(ch1)));
    }
    return 0;
    }在OnLvnColumnclickList(,)添加
            DATA data;
    data.col = pNMLV->iSubItem;
    data.plist = &m_articlelist;
    fav=!fav;
    int len=m_articlelist.GetItemCount();
    for(int i=0;i<len;i++)
    {//设置列表项相关项,以便于排序
    m_articlelist.SetItemData(i,(DWORD_PTR)i);
    }
    m_articlelist.SortItems(MylistCompare,(LPARAM)&data);
      

  4.   

    我的是Unicode环境下的,你要改改
      

  5.   


    改这个函数吗?MylistCompare
      

  6.   

    把sort属性加上, 给CListCtrl的BOOL SortItems(
       PFNLVCOMPARE pfnCompare,
       DWORD_PTR dwData 
    );
     
    添加回调函数。如下:
    // Sort items by associated lParam
    int CALLBACK CListCtrlDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, 
       LPARAM lParamSort)
    {
       UNREFERENCED_PARAMETER(lParamSort);   return (int)(lParam1 - lParam2);
    }