LisView Einträge sortieren
-
Trotz Lesens der MSDN zu diesem Thema bin ich nicht recht schlau geworden, wie ich beispielsweise Zahlen in einer Spalte auf- und absteigend sortieren kann.
Mit dem Beispiel-Code:int CALLBACK ListViewCompareFunc( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { MYITEM *pItem1 = (MYITEM *) lParam1; MYITEM *pItem2 = (MYITEM *) lParam2; // Compare the specified column. int iCmp = lstrcmpi(pItem1->aCols[lParamSort], pItem2->aCols[lParamSort]); // Return the result if nonzero, or compare the // first column otherwise. return (iCmp != 0) ? iCmp : lstrcmpi(pItem1->aCols[0], pItem2->aCols[0]); }
Kann ich so recht nicht ganz was anfangen, kann mir mal jemand hiervon den Sinn erklären ?
-
eine gute Tat noch...*
Zur Erklärung: Diese sog. Callback Funktion wird aufgerufen, wenn die ListView zwei [i]Werte* zum Sortieren vergleichen muß. Die Funktion wird benötigt damit ListView typenunabhängig sortieren kann. Der ListView ist es Wurst, ob in der zu sortierenden Spalte Zahlen, Strings, Datumswerte oder Fischearten stehen. Sie soll sie sortieren und dazu muß sie wissen, ob Wert1 kleiner als, gleich, oder größer als Wert2 ist. Du als Programmierer bestimmst das mit der Funktion, indem den entsprechenden Wert zurücklieferst -1, 0 oder 1.Symbolisch:
Item1 = B*****;
Item2 = GOLDFISCH;[code]
return (Item1 == Item2) ? 0 : ( (Item1 < Item2) ? -1 : 1) ); [/code]
oder als if...else geschrieben:if (Item1 == Item2) return 0; else if (Item1 < Item2) return -1; else return 1;
Ob zwei Fische gleich sind, und welcher Fisch denn der größere ist, entscheidet allein deine Funktion.
-> Zahlen kann man mit == und < vergleichen,
-> Strings mit der Funktion lstrcmpi()
-> Datumwerte indem man sie als Strings im Format JJJJ-MM-TT vergleicht, denn 21.01.2003 < 01.12.2004
-> und Fische vergleicht am anhand der Art, des Alters und des Gewichts
-
Vielen Dank für die umfangreiche Erklärung, jetzt hab ichs geschnallt !
-
der B a r s c h wurde zensiert *schnief*
-
Dann gehe ich jetzt ins Bett