[MFC] CListCtrl: Element wiederfinden

Hi,

vor geraumer Zeit hab ich hier schon mal Hilfe zu meiner Listen-Ansicht erhalten, dafuer bedanke ich mich nochmal nachtraeglich. Indes, es gibt neue Probleme (die alle mehr oder minder aus meiner Unfaehigkeit resultieren).

In einem Dialogfeld habe ich ein Listenfeld angelegt und einer Membervariable vom Typ CListCtrl in der Dialogfeldklasse zugeordnet. In OnInitDialog() erstelle ich zwei Spaltenueberschriften (m_LCIOList.InsertColumn(…)) und versuche dann die Listenelemente einzufuegen:

long i; LV\_ITEM lvitem; char strBuffer[10];
lvitem.mask=LVIF\_TEXT;

for (i=0; i
m\_pIOItem ist ein Feld von structs mit CString strName; und double dValue;. Ich hoffe, das ist so alles halbwegs richtig.

Jetzt das Problem: bei einem Doppelklick auf ein Element der Liste soll ein kleines Dialogfeld zum editieren aufgehen. Dazu muesste ich wissen, auf welches Element der user geklickt hat. Ich gehe durch alle Listenelemente und pruefe, ob GetItemState(lIndex, LVIS\_SELECTED) ist:


    for(lIndex=0; lIndex
    Der Wert auf lIndex ist, wenn ich das richtig verstehe, die Zeile, in der das Element steht. Ich dachte nun, dass ich mit GetItem(LVITEM\*) wieder an mein Listenelement (zumindest das Element lParam der Struktur) rankomme, um die umgekehrte Zuordnung machen zu koennen, jedoch ich weiss nicht wie. Der naive Weg
    
    
        lvitem.iItem=lIndex;
        m\_LCIOList.GetItem(&lvitem);
        lActualItem=lvitem.lParam;
        /\* Do something with m\_pIOItem[lActualItem] \*/
    
    
    geht irgendwie daneben: lActualItem ist immer 0. Wie bediene ich das GetItem() richtig?
    
    Dankbar fuer jeden Hinweis,
     Gruss vom Frank.

Muhaa, ich muss meine Hausaufgaben immer selber machen…

Warum sagt mir denn keiner, dass:

> long i; LV\_ITEM lvitem; char strBuffer[10];  
> lvitem.mask=LVIF\_TEXT;

… ich hier =LVIF_TEXT | LVIF_PARAM; hinschreiben muss, weil er sonst den Parameter gar nicht mit einbastelt.

> for (i=0; i... hier

lvitem=m\_LCIOList.GetItemData(lindex);
lActualItem=lvitem.lParam

eigentlich genau das macht, was ich will.

> break;  
> }  
> }

Ihr seid ja alle total fies. :wink:

Tendenziell albern,
Gruss vom Frank.