SendDlgItemMessage CB_SETITEMDATA et CB_GETITEMDATA

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 12 juin 2009 à 11:49
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 - 12 juin 2009 à 14:32
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 ??

1 réponse

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
12 juin 2009 à 14:32
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
0
Rejoignez-nous