ERLEDIGT
NEIN
NEIN
ANTWORTEN
36
36
ZUGRIFFE
6460
6460
EMPFEHLEN
-
26.07.05 14:33 #31
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Versuch es mal mit einem Cast:
Code :1
m_listCtrl.SortItems( (PFNLCOMPARE)sortitems, 0);
Übrigens sitze ich im Moment wieder an der Listensortierung -- jetzt allerdings mit .Net. Das hat seine eigenen Fallstricke.
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Nun bringt er 3 Fehler:
u:\Projekte\FileExplorer\ColumnLevelView.cpp(297): error C2059: syntax error : ')'
u:\Projekte\FileExplorer\ColumnLevelView.cpp(297): error C2065: 'PFNLCOMPARE' : undeclared identifier
u:\Projekte\FileExplorer\ColumnLevelView.cpp(297): error C2146: syntax error : missing ')' before identifier 'sortitems'
Code: m_listCtrl.SortItems((PFNLCOMPARE)sortitems, 0);
-
das gibts doch nich, ich bekomm es einfach nicht zum Laufen... mit und ohne Cast...
Ich habe das Ganze vor ein paar Wochen schonmal in Angriff genommen und bin kläglich dran gescheitert...
-
Ich werd nun echt bald wahnsinnig. Ich habe nun in größeren zeitlichen Abständen immer wieder versucht, die Suche EINMAL erfolgreich zu implementieren, aber wirklich ohne Erfolg...
Dies ist meine vereinfachte Comparefunktion um es testen zu können:
Code :1 2 3 4 5 6
int CALLBACK MyCompareProc (LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { if ( lParam1 < lParam2 ) return +1; if ( lParam1 > lParam2 ) return -1; return 0; }
Nur beim Aufruf scheiter ich echt kläglich:
Die lustige Standardvariante
bringt folgenden Fehler:Code :1
pView->m_listCtrl.SortItems(MyCompareProc, (LPARAM) &pView->m_listCtrl );
"c:\Develop\Projects\FileExplorer\FileExplorerDoc.cpp(154): error C2664: 'CListCtrl::SortItems' : cannot convert parameter 1 from 'int (LPARAM,LPARAM,LPARAM)' to 'PFNLVCOMPARE'"
Deshalb dachte ich, casten wir das ganze mal in PFNLVCOMPARE, hat aber leider auch nichts geholfen:
Bringt folgenden Fehler:Code :1
pView->m_listCtrl.SortItems((PFNLVCOMPARE)MyCompareProc, (LPARAM) &pView->m_listCtrl );
" c:\Develop\Projects\FileExplorer\FileExplorerDoc.cpp(152): error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'PFNLVCOMPARE' "
Bringt den Fehler:Code :1
pView->m_listCtrl.SortItems((PFNLVCOMPARE)MyCompareProc, (DWORD)this );
" c:\Develop\Projects\FileExplorer\FileExplorerDoc.cpp(153): error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'PFNLVCOMPARE' "
Habe nun gelesen, dass das msdn Beispiel falsch ist und man erst noch mittels CListCtrl::SetItemData den 32 bit - Wert speichern muss. Also habe ich folgenden Funktionsaufruf zugefügt:
Code :1 2 3 4
for (int i=0;i < pView->m_listCtrl.GetItemCount();i++) { pView->m_listCtrl.SetItemData(i, i); }
Aber auch das scheint den Fehler nich zu beheben...
WAS KANN ICH DENN NUN NOCH TUN?!
-
Moin moin,
hört sich echt nach Verzweiflung an
Muss gestehen hab mir die drei Seiten jetzt nicht bis ins letzte durchgelesen, aber folgendes funktioniert einwandfrei bei mir:
hab zwar nicht die View benutzt sondern direkt nen CListCtrl aber das sollte keinen Unterschied machen.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
//Callback Funktion int CALLBACK sortitems( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ) { if ( lParam1 == 0 || lParam2 == 0 ) return 0; CString* pA = (CString*)lParam1; CString* pB = (CString*)lParam2; if(lParamSort)return pA->Compare( LPCTSTR( *pB ) ); else return -pA->Compare( LPCTSTR( *pB ) ); return 0; } //imHeader extern int CALLBACK sortitems( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort ); //Aufruf der Sortierfunktion void CGerateInfo::SortAufgabeByListTitle(int Subitem) { //LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); int i; //- "Itemdatas mit Text füllen" for ( i = 0; i < m_ListAktionen.GetItemCount(); ++i ) { CString strTemp = m_ListAktionen.GetItemText( i, Subitem ); m_ListAktionen.SetItemData( i, (( DWORD_PTR)( new CString( strTemp ))) ); } //- sortieren m_ListAktionen.SortItems( sortitems, 1/*Sortorder*/ ); //SortOrder[pNMLV->iSubItem] = 1-SortOrder[pNMLV->iSubItem]; //- Itemdatas wieder freigeben for ( i = 0; i < m_ListAktionen.GetItemCount(); ++i ) { CString* pA = (CString*) m_ListAktionen.GetItemData( i ); delete pA; m_ListAktionen.SetItemData( i, 0 ); } //*pResult = 0; }
Viel Erfolg beim test.
Gruss MichaelGrüß die Welt, dann grüßt sie dich!
Keine Panik, die Titanic ist schon gesunken!
-
Es sieht so aus, als ob die Aufrufkonventionen nicht zusammenpassen. Hast du Compare-Funktion auch so deklariert?
Ist bei deiner "lustigen Standardvariante" die C2664-Fehlermeldung die einzige, oder kommen da noch welche nach?Code :1
int CALLBACK MyCompareProc (LPARAM , LPARAM , LPARAM);
BTW:
Ist so nicht ganz richtig. Man kann als Sortierfunktion auch eine Memberfunktion verwenden, allerdings muss diese dann als "static" deklariert werden:
Zitat von Kachelator
Vielleicht probierst du es ja mal so aus.Code :1
static int CALLBACK MyCompareProc (LPARAM , LPARAM , LPARAM);
"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Hallo,
ich weis das der Beitrag schon sehr Alt ist, trotzdem möchte ich mich bedanken.
Mir als Programmieranfänger hat er super gut geholfen und alles klappte auf anhieb.
Hoffe das ich auch bald mal wem helfen kann
MfG
JJ
Ähnliche Themen
-
IE Listenelement Lücke
Von dezerver im Forum CSSAntworten: 4Letzter Beitrag: 19.11.07, 12:53 -
Listenelement IE und FF
Von Luna1000 im Forum CSSAntworten: 2Letzter Beitrag: 11.09.07, 16:55 -
Text im Listenelement
Von udo_the_man im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 22.04.06, 21:32 -
Hintergrund für Listenelement
Von ares99kk im Forum CSSAntworten: 6Letzter Beitrag: 09.12.04, 10:05 -
Listenelement, Farbe, checkbox
Von jma im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 22.03.04, 12:22





Zitieren
Login






