Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ VC++ / MFC » Clistctrl::sortitems Fehler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.11.2003, 12:35 Uhr
Alf



Ah ich habs!

Hat man folgende Eiträge:

Text1 // Item = 0 ItemData = 0
Text2 // Item = 1 ItemData = 1
Text3 // Item = 2 ItemData = 2
Text6 // Item = 3 ItemData = 3

Fügt mann nun Text5 ein so hat man folgendes:
Text1 // Item = 0 ItemData = 0
Text2 // Item = 1 ItemData = 1
Text3 // Item = 2 ItemData = 2
Text6 // Item = 3 ItemData = 3
Text5 // Item = 4 ItemData = 4

Ruft man jetzt die SortItems() auf dann kommt das:

Text1 // Item = 0 ItemData = 0
Text2 // Item = 1 ItemData = 1
Text3 // Item = 2 ItemData = 2
Text5 // Item = 3 ItemData = 4
Text6 // Item = 4 ItemData = 3

Die Zuordnung von Item zu ItemData stimmt nicht mehr!

Also:

C++:
void MYClass::SortListe()
{
      m_ListCtrl. SortItems(MyCompareProc, (LPARAM) pSortInfo);

      int ItemCount = m_ListCtrl .GetItemCount();
      int Counter = 0;
      while(Counter < ItemCount)
      {
             // Nun ItemData neu zuordnen
             m_ListCtrl .SetItemData(Counter,Counter);

             ++Counter;
      }
}


Und schon funtz das Prächtig!
--
Mfg

Andy

Dieser Post wurde am 09.11.2003 um 12:37 Uhr von Alf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.11.2003, 12:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


haste ja FAQ-reif gelöst


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: