doppelargh (clistctrl sort)



  • argh no. 1 weil die suche deaktiviert is
    argh no. 2

    ich bekomm das sortieren nich auf die reihe
    beim ersten anklicken der titelleiste klappts... bei allen folgenden springen mir die items irgendwie hoch und runter... kann da kein schema erkennen

    dabei siehts so einfach aus... einfach in der callback funktion sagen welche weiter oben/weiter unten bzw. gleich

    habs auch schon mit nem schalter versucht um die bewertung nach jedem anklicken der leiste umzudrehen... ändert auch nix

    wär super wenn mir jemand einen kleinen funktionierenden beispielcode mit 2 spalten hätte oder weiss was ich vergessen hab
    thx



  • ganz schnell zusammengebastelt:

    //Nested Hilfe-Klasse
    struct ListItemData
    {
    	CListCtrl& lvc;
    	//absteigend oder aufsteigend
    	bool bDescending;
    	int iColumn;
    };
    
    static int CALLBACK OnCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3)
    {
    	ListItemData& lid = *reinterpret_cast<ListItemData*>(lParam3);
    
    	CString strText1 = lid.lvc.GetItemText(lParam1,lid.iColumn),
    			strText2 = lid.lvc.GetItemText(lParam2,lid.iColumn);
    
    	//für Text
    	return lid.bDescending ? ::lstrcmp(strText1,strText2) > 0 ? -1 : 1 :
    		::lstrcmp(strText1,strText2) <= 0 ? -1 : 1;
    
    	//für Zahlen
    	return lid.bDescending ? ::atoi(strText1) > ::atoi(strText2) ? -1 : 1 :
    		::atoi(strText1) < ::atoi(strText2) ? -1 : 1;
    }
    
    //Aufruf bei LVN_COLUMNCLICK
    
    static bool a;
    
    ListItemData lid = {lvc,a = !a,0};
    lvc.SendMessage(LVM_SORTITEMSEX,reinterpret_cast<WPARAM>(&lid),
    	reinterpret_cast<LPARAM>(OnCompare));
    

    LVM_SORTITEMSEX ist erst ab Windows 98 mit Internet Explorer 5 verfügbar, aber wer viel zu viel Zeit hat, kann auch LVM_SORTITEMS nehmen. 🙄



  • lol hab einfach nur LVM_SORTITEMS durch LVM_SORTITEMSEX ersetzt und schon gings
    auf jeden fall thx für den code


Anmelden zum Antworten