Frenchy62620
Messages postés14Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention14 avril 2007
-
12 nov. 2004 à 09:24
Frenchy62620
Messages postés14Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention14 avril 2007
-
12 nov. 2004 à 12:08
Voilà le prob..je suis sous VC++ 6
J'ai créé une listbox dans lequel j'ajoute bien des éléments..SendMessage(hdlist,LB_ADDSTRING,0,buff)
là pas de prob la listbox se met à jour..mais lorsque je veux récupérer le contenu avec SendMessage(hdlsit,LB_GETITEMDATA,numitem,0) je ne récupére rien...dasn la messagebox (pour moi il y a une erreur)
De même qd je veux mettre à jour la listbox je voudrais utiliser SENDMessage(hdlist,LB_SETITEMDATA,numitem,buff) au lieu de LB_DELETESTRING suivi LB_INSERSTRING ..mais la listbox ne se met pas à jour alors que la seconde solution oui mais elle n'est pas intéressante pour moi..
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 nov. 2004 à 09:44
dans une listbox (et d'autres controles de listes), chaque item à son texte (celui de LB_ADDSTRING) et 32 bits de données personnelles associées. ces 32 bits peuvent êtres des infos complémentaires sur l'item ou un pointeur vers une structure qui contient ces infos sup. Faire LB_GETITEMDATA ou LB_SETITEMDATA ne modifie en rien l'affichage de la listbox (le texte sera toujours le même), mais seulement les données internes. Si tu veux renommer un élément, il n'y a pas le choix (sauf erreur de ma part), il faut faire LB_DELETESTRING suivit de LB_INSERTSTRING.
Pour récupérer le texte d'un item c'est LB_GETTEXT
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 nov. 2004 à 11:06
par exemple si ta listbox contient des noms de personnes et que pour chaque personne tu as une structure de données contenant des infos dessus (nom, adresse, ...). Pour accéder à ces infos à partir du nom sélectionné, tu peux sauvegarder des données dans un tableau et y accéder par l'indice dans la liste. Maintenant, si ta liste est triée ou que son contenu évolue, tu sera obligé de mettre à jour en permanence ton tableau pour refleter l'odre de la listbox.
La solution est alors d'associer un pointeur vers la structure à chaque item de la liste. Ainsi, lors de l'ajout d'un nom dans la liste, tu crée également une nouvelle structure que tu asocie par SETITEMDATA. Pour récupérer les infos, c'est GETITEMDATA. A tout momment tu auras tes infos à partir d'un indice dans la listbox.
// ajout :
MASTRUCT* mastruct = new MASTRUCT;
int index=SendMessage(hlst, CB_ADDSTRING, 0, (LPARAM)nom);
SendMessage(hlst, CB_SETITEMDATA, index, (LPARAM)mastruct);
Frenchy62620
Messages postés14Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention14 avril 2007 12 nov. 2004 à 10:54
Merci de ta réponse..j'ai utilisé ta solution ca fonctionne parfaitement...mais pour précision intellectuelle dans quelle situation on utilise alors SETITEMDATA et GETITEMDATA..je vois pas bien l'intérêt