SendDlgItemMessage CB_SETITEMDATA et CB_GETITEMDATA

Signaler
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
-
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
-
Pour faire simple, je remplis une ComboBox d'une boite de dialoque et remplis aussi l'itemData avec une chaîne. Je souhaite récupérer la chaine dans un MessageBox.

Index=SendDlgItemMessage(hDlg, ID_CB1, CB_ADDSTRING, 0, (LONG) "Ceci est un test");
SendDlgItemMessage(hDlg, ID_CB1,CB_SETITEMDATA,Index,(LPARAM)"Un test");
La chaîne "Un test" est convertie en LONG
../..

Maintenant, je convertis le LONG en retour de SendDlgItemMessage en string
ostringstream oss;
oss << SendDlgItemMessage(hDlg, ID_CB1,CB_GETITEMDATA,SendDlgItemMessage(hDlg, ID_CB1, CB_GETCURSEL, 0, 0),0);
Je convertis la string en char* et cast en (const char*)
MessageBox(NULL, (const char*)oss.str().c_str(), "select ITEMDATA", MB_OK | MB_ICONINFORMATION);

La messageBox m'affiche 4460720, pourquoi la conversion ne fonctionne pas ??
A voir également:

1 réponse

Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour,

CB_SETITEMDATA te permet d'associer une valeur de type DWORD à un item de ta combobox. Donc avec (LPARAM)"Un test" tu mets à cet endroit l'adresse de "Un test", que tu récupères logiquement avec CB_GETITEMDATA.

On se sert généralement de cette fonctionnalité pour associer un pointeur sur un objet à un item de la combobox de manière à accéder directement à cet objet en récupérant l'index de la ligne sélectionnée avec CB_GETCURSEL.

ed73