CListCtrl sortierung MFC Beispiel

Hier das MFC bespiel :

// 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);
 TRACE("\nSTRING 1: %s\nSTRING 2: %s",strItem1,strItem2);
 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);
}

Ich hab daraus das gemacht

void CSVView::open\_mouth:nLvnColumnclick(NMHDR \*pNMHDR, LRESULT \*pResult)
{
 LPNMLISTVIEW pNMLV = reinterpret\_cast(pNMHDR);
 // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
 int Columne = pNMLV-\>iSubItem;
 CListCtrl& myList = GetListCtrl();
 CListCtrl\* pmyListCtrl = &myList;
 // Sort the list view items using my callback procedure.
 pmyListCtrl-\>SortItems(MyCompareProc, (LPARAM) pmyListCtrl);


 \*pResult = 0;
}

Als Ausgabe für Vergleichstring string1 sowie string2 erhalte ich aber den gleichen SelectItem Item(1,0) Eintrag.

Leider nicht Item(1,0) Vergleich Item(2,0).

Wo mach ich was falsch, bzw wo irrt wich das MFC beispiel :-

Als Ausgabe für Vergleichstring string1 sowie string2 erhalte
ich aber den gleichen SelectItem Item(1,0) Eintrag.

Leider nicht Item(1,0) Vergleich Item(2,0).

Wo mach ich was falsch, bzw wo irrt wich das MFC beispiel :-

Gute Frage, denk aber mal das es am Fehlenden
SetItemData liegt, hab ich nun eingesetzt , also forlaufende nummerierung SetItemData((DWORD) zaehler);

Jetzt geht das Sortieren, aber nur beim ersten mal wenn ich die Column anklicke.
Bei jedem weiteren mal auf die Column geklickt, sortiert er erneut, aber nicht richtig ??
Kann es wieder sein das es was mit den SetItemData() zu tun hat ?

Hier das MFC bespiel :

// 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);
TRACE("\nSTRING 1: %s\nSTRING 2: %s",strItem1,strItem2);
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);
}

Ich hab daraus das gemacht

void CSVView::open_mouth:nLvnColumnclick(NMHDR *pNMHDR, LRESULT
*pResult)
{
LPNMLISTVIEW pNMLV =
reinterpret_cast(pNMHDR);
// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die
Benachrichtigung ein.
int Columne = pNMLV->iSubItem;
CListCtrl& myList = GetListCtrl();
CListCtrl* pmyListCtrl = &myList;
// Sort the list view items using my callback procedure.
pmyListCtrl->SortItems(MyCompareProc, (LPARAM)
pmyListCtrl);

*pResult = 0;
}

Als Ausgabe für Vergleichstring string1 sowie string2 erhalte
ich aber den gleichen SelectItem Item(1,0) Eintrag.

Leider nicht Item(1,0) Vergleich Item(2,0).

Wo mach ich was falsch, bzw wo irrt wich das MFC beispiel :-

Gute Frage, denk aber mal das es am Fehlenden
SetItemData liegt, hab ich nun eingesetzt , also forlaufende
nummerierung SetItemData((DWORD) zaehler);

Jetzt geht das Sortieren, aber nur beim ersten mal wenn ich
die Column anklicke.
Bei jedem weiteren mal auf die Column geklickt, sortiert er
erneut, aber nicht richtig ??
Kann es wieder sein das es was mit den SetItemData() zu tun
hat ?

Hat damit zu tune,
Ich tu jetzt vor jedem Sortieren eine einfache Schleife

 for (int nICount=0; nICountSortItems(MyCompareProc, (LPARAM) pmyListCtrl);

Ob ich das aber gut finde ist ne 2 frage :wink:

Ich tu jetzt vor jedem Sortieren eine einfache Schleife

for (int nICount=0; nICountSortItems(MyCompareProc, (LPARAM)
pmyListCtrl);

Ob ich das aber gut finde ist ne 2 frage :wink:

Naja, der Effekt is nett.
Durch das neu nummerieren der SetItemData hab ich eine Vorsortierung / Mehrspaltensortierung.