000
03.11.2003, 21:28 Uhr
Alf
|
Hy!
Ich hab da ein Problem mit der CListCtrl::SortItems.
C++: |
CListCtrl m_cListCtrl;
...
// InsertColumn
m_cListCtrl.InsertColumn(0, "Column1", LVCFMT_CENTER, 53, 0); m_cListCtrl.InsertColumn(1, "Column2", LVCFMT_CENTER, 255, 1); m_cListCtrl.InsertColumn(2, "Column3", LVCFMT_CENTER, 255, 2);
...
// InsertItem
int iItem = m_cListCtrl.GetItemCount();
m_cListCtrl.InsertItem(iItem, str1);
m_cListCtrl.SetItemData(iItem,iItem); // Flo hatte mal gepostet das das für die SortItems() wichtig wehre.
m_cListCtrl.SetItemText(iItem,1, str2); m_cListCtrl.SetItemText(iItem,2, str3);
STRUCKT_SORT_INFO SortInfo;
SortInfo.pListCtrl = & m_cListCtrl; SortInfo.nSubItem = 0; SortInfo.bAufsteigend = TRUE;
m_cListCtrl.SortItems(MyCompareProc, (LPARAM) &SortInfo);
...
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { pSTRUCKT_SORT_INFO pSortInfo = (pSTRUCKT_SORT_INFO)lParamSort; CString strItem1 = pSortInfo->pListCtrl->GetItemText(lParam1, pSortInfo->nSubItem); CString strItem2 = pSortInfo->pListCtrl->GetItemText(lParam2, pSortInfo->nSubItem); int RVal = strcmp(strItem1, strItem2);
FILE* Stream; Stream = fopen("Prott.txt","a"); fprintf(Stream, "RVAL = %d\tStr1 = %s\tStr2 = %s\n", RVal, strItem1, strItem2); fclose(Stream); if(!pSortInfo->bAufsteigend) RVal *= -1; return RVal; }
|
Nun gut ich habe da ab und an Sortier Fehler! Wenn ich z.B.: Bei m_cListCtrl.InsertItem(iItem, str1); für str1 nach einander die Werte: “1“, “2“, “3“, “6“, “5“ , “4“ und dazwischen immer wieder die SortItems(); aufrufe zeigt er: “1“, “2“, “3“, “4“, “6“ , “5“ an.
Hier mal die Werte der MyCompareProc() beim letzten Aufruf von SortItems():
RVAL = -1 Str1 = 2 Str2 = 3 //daraus resultiert: 2<3 RVAL = -1 Str1 = 1 Str2 = 2 //daraus resultiert: 1<2<3 RVAL = 1 Str1 = 5 Str2 = 4 //daraus resultiert: 4<5 RVAL = 1 Str1 = 6 Str2 = 4 //daraus resultiert: 4<6 RVAL = 1 Str1 = 6 Str2 = 5 //daraus resultiert: 4<5<6 RVAL = -1 Str1 = 1 Str2 = 4 //daraus resultiert: 1<4<5<6 RVAL = -1 Str1 = 2 Str2 = 4 //daraus resultiert: 1<2<4<5<6 RVAL = -1 Str1 = 3 Str2 = 4 //daraus resultiert: 1<2<3<4<5<6
Dem zufolge hätte eigentlich alles Richtig sein sollen. Hat einer eine Idee was ich falsch mache?
Ich benutze gerade einen MS Visual C++ V5.0 Standart.
Vielen Dank im voraus! -- Mfg
Andy Dieser Post wurde am 03.11.2003 um 21:30 Uhr von Alf editiert. |