CListCtrl und SortItems()



  • Hallo,

    mal wieder eine leidige Frage zu CListCtrl...ich beginne diese Klasse zu hassen...

    Also, die Items in dieser CListCtrl sind par SetItemData() mit Ojekten einer Klasse Foo verbunden, die eine Methode CString getName() hat. Die Listeneinträge sollen nun alphabetisch anhand der Namen sortiert werden.

    Folgendes hab ich gemacht:
    **************************
    1.) Im Resourcen-Editor kann man doch das Sortieren der CListBox einstellen...ich dachte also, das reicht.....leider bekam ich dann sehr seltsame Programmabstürze, da bereits in der Schleife mit dem Füllen der ClistCtrl irgendwas schief laufen muß.

    for (int i=0; i < 10; i++){
    Baue Listitem zusammen (strItem kommt von foo.getName())
    SetItemData(i, pointer auf foo)
    mal spaßeshalber GetItemData(0) aufgerufen
    }

    ===> das ergebnis war, das beim ersten Schleifendurchlauf GetItemData(0) noch den richtigen Pointer liefert - nämlich den, den ich da grad reingesteckt hab.
    ==> beim 2. Durchlauf liefert GetItemData(0) dann aber auf einmal NULL !!!!

    Weiß jemand, wieso??...

    2.)...dann hab ich mal gegoogled und auch was bzgl SortItems() gefunden...Hier ist mir auch was nicht klar....und zwar zeigen die Beispiele immer nur, wie die Sortierfunktion selbst auszusehen hat...aber wie rufe ich die denn auf??? Wann und wie oft muß ich denn überhaupt SortItems() rufen??? Muß ich etwa jedesmal, wenn mit der Liste was passiert, über alle Items iterieren und SortItems() rufen???



  • CListView::SortItems() benötigt eine benutzerdefinierte Sortierfunktion, den "SortItems()" weiß ja nicht was und wie Du sortieren willst. In dieser CALLBACK-Funktion wird die eigentliche Sortierung vorgenommen.

    int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
    

    diese Funktion muß als Extern "C" definiert werden und entfernt sich eigentlich von der C++-Welt 😉


Anmelden zum Antworten