Immernoch CListView und das Sortieren der Items!!!
-
Hi Leute!
Ich wieder!
Also nochmal! Ich habe eine CObArray Liste! Aus dieser werden Daten ausgelesen und in eine CListCtrl Liste geladen! Ganz Toll! Jetzt habe ich es geschaft die Liste Sortieren zu lassen (Zugegeben nicht selbs geschrieben!)! Nun hatte ich das Problem das ich nach dem Sortieren nicht die zuordnung von Items und Listenelementen hinbekommen habe! Da wurde mir der Tip gegeben den Index der linearen Liste in der lParam Variable von dem Item zu speichern! Gute Idee direkt umgesetzt! Nu das nächste Problem:BOOL CMyListCtrl::SortItems(int nColumn, int nOrder) { // if nColumn < 0 the resort with the last used column and order // nOrder > 0 => assending, nOrder < 0 => desending, nOrder = 0 => toggle if (nColumn >= 0) { m_nSortColumn = nColumn; m_pSortOrders[m_nSortColumn] = (nOrder != 0) ? nOrder : -m_pSortOrders[m_nSortColumn]; } if (m_nSortColumn < 0) return FALSE; // Reset the param entry to point to the index LV_ITEM lvi; lvi.mask = LVIF_PARAM; lvi.iSubItem = 0; for (lvi.iItem = 0; GetItem(&lvi); lvi.iItem++) { lvi.lParam = lvi.iItem; SetItem(&lvi); } // Set the parameters for the compare function long lParams[3] = {(long) this, (long) m_nSortColumn, (long) m_pSortOrders[m_nSortColumn]}; // Sort the items return CListCtrl::SortItems(&CompareFunc, (LPARAM) lParams); }Man beachte das die sortierfunktion in der schleife lParam verändert! Toll! Warum diese Funktion das macht weiss ich nicht!
Hier noch die CALLBACK funktion von SortItems:int CALLBACK CMyListCtrl::CompareFunc(LPARAM nItem1, LPARAM nItem2, LPARAM lParams) { CMyListCtrl* pList = ((CMyListCtrl **) lParams)[0]; int nSubItem = ((int *) lParams)[1]; int nOrder = ((int *) lParams)[2]; int nCompare = lstrcmp(pList->GetItemText(nItem1, nSubItem), pList->GetItemText(nItem2, nSubItem)); return nOrder * nCompare; }Ich versteh nicht wozu die funktion diese Variabel braucht!!!!!
Bin langsam verzweifelt!
Ich danke euch schon mal für euere Hilfe!Mfg Andi