CListCtrl::SortItem Problem!!!!!



  • Habe mir das Beispiel aus der MSDN angesehen:

    // 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;
       CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);
       CString    strItem2 = pListCtrl->GetItemText(lParam2, 0);
    
       return strcmp(strItem2, strItem1);
    }
    
    void snip_CListCtrl_SortItems()
    {
       // The pointer to my list view control.
       extern CListCtrl* pmyListCtrl;
    
       // Sort the list view items using my callback procedure.
       pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
    }
    

    Sieht ja ganz gut aus, aber wo sage ich welches ListCtrl er Sortieren soll und nach welcher Spalte 😕 ??????

    [ Dieser Beitrag wurde am 14.09.2002 um 15:42 Uhr von Fink Christoph editiert. ]



  • // 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;
       CString    strItem1 = pListCtrl->GetItemText(lParam1, 0);//lParam1 ist Zeile 1, 0 ->erste Spalte
       CString    strItem2 = pListCtrl->GetItemText(lParam2, 0););//lParam2 ist Zeile 2, 0 ->erste Spalte
    
       return strcmp(strItem2, strItem1);
    }
    


  • Und wo definiere ich welche ListCrtl sortiert wird????



  • Nein. lparam1&2 sind NICHT die Zeilen.
    Dort wird nur der Wert übergeben den man bei InsertItem angegeben hat (TVIF_PARAM)

    Mit z.B. FindItem kann man sich dann die Zeile holen...

    LVN_COLUMNCLICK behandeln für das auf die Spalte klicken.



  • Was muss ich jetzt machen damit sich die ListCtrl IDC_STATISTIK bei Columnclick nach der geklickten Spalte sortiert????



  • Weiß das niemand????
    Oder hat jemand eine andere Lösung????????



  • z.B.

    CListCtrl* pList = Get...
        for(int i = 0;i < 25;++i)
        {
            pList->InsertItem(i,"Text");
            pList->SetItemData(i,i);
            // Den ItemData Wert kannst du auch bei InsertItem mit angeben
            // war jetzt nur zu faul
        }
    

    Bei deiner SortItem-Callback Proc kannst du dann mit FindItem(...) den Index holen und anschließend überprüfen ob die zwei Zeilen gleich oder kleiner/größer sind. Ist zwar nicht gerade die schnellst Lösung aber es funktioniert.

    [ Dieser Beitrag wurde am 20.09.2002 um 13:47 Uhr von Nemesyzz editiert. ]



  • Könntest du mir das mit FinItem noch ein wenig genauer erklären???


Anmelden zum Antworten