Bonjour,
Je remplie un CListCtrl gr�ce � une structure (dans lequel se trouve un id, un libell� et une quantit�). J'affiche le libell� et la quantit� dans 2 colonnes diff�rentes et je voudrai que mon id soit associ� � la ligne de mani�re � ce que lorque je s�lectionne une ligne et que j'appuie sur un bouton, je sache sur quel �l�ment de ma structure je dois travailler.
Je ne peux pas me fier � la position du curseur dans le CListCtrl car les donn�es ne sont pas affich�es dans le m�me ordre qu'elles sont ins�r�es.
J'ai utilis� une discussion de ce forum pour ins�rer une CString dans le lParam de l'item gr�ce au SetItemData mais je ne r�cup�re jamais rien.
Voici le code associ� :
Initialisation du CListCtrl :
et le code lorsque j'appuie sur mon bouton qui doit me ramener l'id de la ligne :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 void CReceptionMP::RemplirListScan() { LV_COLUMN lvcolumn; int iSubItem,iActualItem = 0; LV_ITEM lvitem; int index = 0; CString l_mess; TCHAR buffer[61]; SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT)); m_liste.SetRedraw(FALSE); int nColumnCount = m_liste.GetHeaderCtrl()->GetItemCount(); for (int o=0;o < nColumnCount;o++) { m_liste.DeleteColumn(0); } m_liste.DeleteAllItems(); // insertion des colonnes lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVIF_PARAM; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.pszText = L"Matière Première"; lvcolumn.iSubItem = 0; lvcolumn.cx = 160; m_liste.InsertColumn(0, &lvcolumn); lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.pszText = L"Qté"; lvcolumn.iSubItem = 1; lvcolumn.cx = 40; m_liste.InsertColumn(1, &lvcolumn); m_liste.DeleteColumn(2); // insertion des valeurs dans les colonnes for (int i=0;i < gNbLgnAtd;i++) { for (iSubItem = 0; iSubItem < 2; iSubItem++) { lvitem.mask = LVIF_TEXT; lvitem.iItem = (iSubItem == 0)? index : iActualItem; lvitem.iSubItem = iSubItem; lvitem.iImage = NULL; switch (iSubItem) { case 0 : l_mess = CString(strliste[i].LibMP); l_mess.TrimRight(); _tcscpy(buffer,(LPCTSTR)l_mess); lvitem.pszText = buffer; break; case 1 : l_mess = CString(strliste[i].QteLgnrecep); l_mess.TrimRight(); _tcscpy(buffer,(LPCTSTR)l_mess); lvitem.pszText = buffer; break; } if (iSubItem == 0) { iActualItem = m_liste.InsertItem(&lvitem); CString IdLgnAtdStr = (CString)strliste[i].IdLgnAtd; CString *pCode = reinterpret_cast<CString*> (m_liste.GetItemData(lvitem.iItem)); if (pCode) delete pCode; pCode = new CString(IdLgnAtdStr); m_liste.SetItemData(lvitem.iItem, reinterpret_cast<DWORD_PTR> (pCode)); index++; } else { m_liste.SetItem(&lvitem); } } } UINT flag = LVIS_SELECTED | LVIS_FOCUSED; m_liste.SetFocus(); m_liste.SetItemState(0, flag, flag); m_liste.SetFocus(); m_liste.SetRedraw(TRUE); SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); }
Je ne r�cup�re rien dans pNewTypeForm. Quelqu'un a-t-il une id�e?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 void CReceptionMP::OnModifautreparam() { int nItem=-1; POSITION pos = m_liste.GetFirstSelectedItemPosition(); if (pos!= NULL) nItem= m_liste.GetNextSelectedItem(pos); CString *pNewTypeForm = reinterpret_cast<CString*> (m_liste.GetItemData(nItem)); }
Je vous remercie d'avance
Partager