求一个,不用派生CListCtrl(不是listview)可以排序中文,英文,整数的代码,由于急用,那位大哥帮忙贴一下,感激~~~

解决方案 »

  1.   

    对listctrl进行排序,本来就不需要进行派生,只需要自己写排序的回调函数,可以参考网上的部分代码,提取自己需要的,msdn中也有简单的例子
    http://www.codeguru.com/cpp/controls/editctrl/article.php/c523/
      

  2.   

    Sorts list view items using an application-defined comparison function. 
    BOOL SortItems(
       PFNLVCOMPARE pfnCompare,
       DWORD_PTR dwData 
    );
     
    // Sort items by associated lParam
    static int CALLBACK 
    MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
       return lParam1 < lParam2;
    }
      

  3.   

    还是没有搞好这个sort,哪位可以把工作在listctrl,不用派生,可以排int 中文,英文的示例贴一下,已经对listctrl快疯了~~~~~~~~
      

  4.   

    记得vc有自己的排序函数comparestring函数吧 查查msdn。
      

  5.   

    看过了msdn、codeproject和codegurn,这个东西折磨人,分不够了,还有329分奉上
      

  6.   

    响应ListCtrl的LVN_COLUMNCLICK消息,调用CListCtrl::SortItems()成员函数:
       pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
    其中:
    BOOL SortItems(
       PFNLVCOMPARE pfnCompare,
       DWORD_PTR dwData 
    );
    pfnCompare为比较函数的指针,比较函数原型:
    int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, 
       LPARAM lParamSort);
    dwData为自定义的数据,这里传入ListCtrl的实例指针。
    // Sort the item in reverse alphabetical order.
    static int CALLBACK 
    MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
       // lParamSort contains a pointer to the list view control.
       CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
    //lParamSort参数就是上面SortItems的第二个参数,传入的是(LPARAM) pmyListCtrl,这里还原成ListCtrl的实例指针   CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
       CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);
    //lParam1,lParam2参数是参与比较的两个列表项的ItemData,在插入项目时指定为索引值。这里是对第一列排序,所以GetItemText第二个参数是0,如果需要对其他列排序,可以在上面响应LVN_COLUMNCLICK消息的时候把子项索引保存下来在这里调用。   return strcmp(strItem2, strItem1);这里调用函数strcmp来实现倒序排列,比较函数的返回值决定了排列顺序,返回负数第一项在第二项前面,返回正数第一项在第二项后面。
    }