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 :

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));
}
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
 
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 ne r�cup�re rien dans pNewTypeForm. Quelqu'un a-t-il une id�e?

Je vous remercie d'avance