Bonjour, j'essaye de faire un controle ATL basé sur une listbox, pour une page Web, mais j'ai des soucis pour compter les valeurs.
Voici mon constructeur :
Voici comment j'ajoute une ligne à ma ListBox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DnDZone() : m_ctlListBox(_T("ListBox"), this, 1) { m_bWindowOnly = TRUE; }
et voici comment je compte les valeurs :
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 STDMETHODIMP DnDZone::addString(BSTR bstrItem) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (!::IsWindow(m_hWnd)) { return Error (OLESTR ("Invalid or NULL window handler for the ListBox control"), IID_IDnDZone, E_FAIL); } long count = 0; HRESULT hRes = S_OK; hRes = get_length (&count); if (FAILED (hRes)) { return hRes; } // If the count number is one of the indcies, then add a blank line and then add the text // string. USES_CONVERSION; if (::SendMessage (m_ctlListBox.m_hWnd, LB_ADDSTRING, 0, reinterpret_cast<LPARAM>(W2CT (bstrItem))) == LB_ERR) { return Error (OLESTR ("Failed to add text string in ListBox control"), IID_IDnDZone, E_FAIL); } return S_OK; }
Le problème est que je reçois toujours 0 au GETCOUNT. Est ce que je dois mettre quelque chose à jour pour avoir la bonne valeur ? Est ce qu'il y a une méthode que je devrais implementer et qu'il me manque (genre OnDrawItem) ?
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 STDMETHODIMP DnDZone::get_length(LONG* pVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // Do some initial checks. if (!::IsWindow(m_hWnd)) { return Error (OLESTR ("Invalid or NULL window handler for the ListBox control"), IID_IDnDZone, E_FAIL); } if (pVal == NULL) { return Error (OLESTR ("NULL pointer passed in to return the value"), IID_IDnDZone, E_POINTER); } *pVal = (int)::SendMessage(m_ctlListBox.m_hWnd, CB_GETCOUNT, 0, 0L); if (*pVal == LB_ERR) { return Error (OLESTR ("Error getting number of items from ListBox control"), IID_IDnDZone, E_FAIL); } return S_OK; }
Merci d'avance.
Partager