Accueil > Forum > > > > [API win32] Listbox capricieuse
[API win32] Listbox capricieuse
lundi 13 mars 2006 à 15:05:13 |
[API win32] Listbox capricieuse

JoebarGlut
|
Bonjour, Voila j'ai un souçis avec une listebox, j'espere que quelqu'un pourra m'aider. Moi je n'ai plus d'idées et pourtant y'a rien de plus simple... quelque chose dois m'echapper. Voila mon but : J'ai un bouton AJOUTER, SUPPRIMER, UP et DOWN. Je remplis ma listebox avec des objets Cmp3. Le programme compile, il ne plante pas, je peux ajouter des mp3, je peux les supprimer. Jusque la tout va bien. Mais lorsque je veux intervertir deux objets, je fais appel a la fonction UP pour intervertir vers le haut et DOWN vers le bas. En debugant mes fonctions : mes objets s'intervertssent correctement. Mais quand je fais appel à update(), ma listebox est censée se détruire et reafficher chaques objets Cmp3. Lorsque je debug update, tout est normal. ALORS POURQUOI L'AFFICHAGE NE SE FAIS PAS ? (alors que cette fonction fonctionne avec ajouter et supprimer) Autre remarque : Lorsque je fais un UP(), puis un suppr() du mp3 que je viens de monter, il me supprime le bon objet, mais pas le bon affichage puisque ma listebox n'a pas fait de UP(). J'espere que j'etais assez clair, y'a rien de compliqué et la je suis bloqué sur cette bizarerie incomprehensible :( Voici un peu de code : if(UPDATE) // mise a jour de la playliste (WINDOWS LOOP) {Cplaylist->update() ; UPDATE = 0 ;
} //(SWITCH BOUTON)*************************************
case IDC_BUTTON9 : // AJOUTER
Cplaylist->add(Cplaylist->Mp3_Name); UPDATE = 1 ;
return TRUE ;
/*******************************************************/ case IDC_BUTTON3 : //SUPPRIMERif(Cplaylist->suppr() <= 0)
MessageBox(Dlg,"Vous devez selectionner un Mp3 a supprimer !",NULL,MB_OK);
else
UPDATE = 1 ;
return TRUE ;
/********************************************************/ case IDC_BUTTON1 : //UP
Cplaylist->up(); UPDATE = 1 ;
return TRUE ;
/********************************************************/ case IDC_BUTTON4 : //DOWN
Cplaylist->down() ; UPDATE = 1 ;
return TRUE ;
// (PLAYLIST.CPP)******************************************/
int playliste::add(char * nom_mp3) {
*(Cmp3+nb_mp3) = new mp3 ; (*(Cmp3+nb_mp3))->set_name(nom_mp3) ; //c public mais spa grv lol this->nb_mp3++ ; return (nb_mp3-1) ;
}
/**********************************************************/ int playliste::suppr() {
// Récupère l'indexe de l'item sélectionner int SelIndex = SendMessage(hList, LB_GETCURSEL, 0, 0); if(SelIndex != LB_ERR) // si kkchose est selectionne {
char del[MAX_PATH] ; sprintf(del,"%s\\Playlist\\%s",(*(Cmp3+SelIndex))->Chemin,(*(Cmp3+SelIndex))->nom); DeleteFile(del) ; int i = 0; while((SelIndex+i) != (nb_mp3 - 1)) {
memcpy((*(Cmp3+SelIndex+i))->nom, (*(Cmp3+(SelIndex+i+1)))->nom, MAX_PATH); memcpy((*(Cmp3+SelIndex+i))->Chemin, (*(Cmp3+(SelIndex+i+1)))->Chemin, MAX_PATH); (*(Cmp3+SelIndex+i))->LenStart = (*(Cmp3+(SelIndex+i+1)))->LenStart ; i++;
} delete *(Cmp3+nb_mp3-1) ; nb_mp3--; return 1 ;
} else return -1 ;
}
/***********************************************************************/ void playliste::up() {
char tmpnom[MAX_PATH] ; char tmppath[MAX_PATH] ; int tmplen ; int SelIndex = SendMessage(hList, LB_GETCURSEL, 0, 0); if(SelIndex != LB_ERR) // si kkchose est selectionne {
if(SelIndex != 0) {
memcpy(tmpnom, (*(Cmp3+(SelIndex)))->nom, MAX_PATH); memcpy(tmppath, (*(Cmp3+(SelIndex)))->Chemin, MAX_PATH); tmplen = (*(Cmp3+(SelIndex)))->LenStart ; memcpy((*(Cmp3+SelIndex))->nom, (*(Cmp3+(SelIndex-1)))->nom, MAX_PATH); memcpy((*(Cmp3+SelIndex))->Chemin, (*(Cmp3+(SelIndex-1)))->Chemin, MAX_PATH); (*(Cmp3+SelIndex))->LenStart = (*(Cmp3+(SelIndex-1)))->LenStart ;
memcpy((*(Cmp3+(SelIndex-1)))->nom,tmpnom, MAX_PATH); memcpy((*(Cmp3+(SelIndex-1)))->Chemin,tmppath, MAX_PATH); (*(Cmp3+(SelIndex-1)))->LenStart = tmplen ;
}
}
}
/****************************************************************************/ void playliste::down() {
char tmpnom[MAX_PATH] ; char tmppath[MAX_PATH] ; int tmplen ; int SelIndex = SendMessage(hList, LB_GETCURSEL, 0, 0); if(SelIndex != LB_ERR) // si kkchose est selectionne {
if(SelIndex != (nb_mp3-1)) {
memcpy(tmpnom, (*(Cmp3+(SelIndex)))->nom, MAX_PATH); memcpy(tmppath, (*(Cmp3+(SelIndex)))->Chemin, MAX_PATH); tmplen = (*(Cmp3+(SelIndex)))->LenStart ; memcpy((*(Cmp3+SelIndex))->nom, (*(Cmp3+(SelIndex+1)))->nom, MAX_PATH); memcpy((*(Cmp3+SelIndex))->Chemin, (*(Cmp3+(SelIndex+1)))->Chemin, MAX_PATH); (*(Cmp3+SelIndex))->LenStart = (*(Cmp3+(SelIndex+1)))->LenStart ;
memcpy((*(Cmp3+(SelIndex+1)))->nom,tmpnom, MAX_PATH); memcpy((*(Cmp3+(SelIndex+1)))->Chemin,tmppath, MAX_PATH); (*(Cmp3+(SelIndex+1)))->LenStart = tmplen ;
}
}
}
/******************************************************************************** /********************************************************************************
|
|
lundi 13 mars 2006 à 15:10:55 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
oups j'ai oublié la fonction qui m'embete (seulement pour up et down) :
void playliste::update() { SendMessage(hList, LB_RESETCONTENT, NULL, NULL); for(int i=0 ; i!=nb_mp3 ; i++) { if(SendMessage(hList, LB_ADDSTRING, NULL, (LPARAM) (*(Cmp3+i))->nom) == LB_ERR) exit(-1); // erreur a traiter HDC hdc = GetDC(NULL); GetTextExtentPoint32(hdc,(*(Cmp3+i))->nom, strlen((*(Cmp3+i))->nom),(LPSIZE)&size); if(size > MaxLen) { MaxLen = size ; SendMessage(hList, LB_SETHORIZONTALEXTENT, size, 0); } } }
|
|
lundi 13 mars 2006 à 15:13:34 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
burk
void playliste::update() {
SendMessage(hList, LB_RESETCONTENT, NULL, NULL); for(int i=0 ; i!=nb_mp3 ; i++) {
if(SendMessage(hList, LB_ADDSTRING, NULL, (LPARAM) (*(Cmp3+i))->nom) == LB_ERR)
exit(-1); // erreur a traiter
HDC hdc = GetDC(NULL); GetTextExtentPoint32(hdc,(*(Cmp3+i))->nom, strlen((*(Cmp3+i))->nom),(LPSIZE)&size); if(size > MaxLen) {
MaxLen = size ; SendMessage(hList, LB_SETHORIZONTALEXTENT, size, 0);
}
}
}
|
|
lundi 13 mars 2006 à 16:51:40 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
J'ai du nouveau. apparament quand lors de l'update la chaine de caractere s'agrandie, j'envois le message suivant qui semble me faire buguer. SendMessage(hList, LB_SETHORIZONTALEXTENT, size, 0);
A ce moment la, meme si i != nb_mp3, je sors quand meme du for ! Trop fort, lol jamais vu ca. Il sors du for et il va directement à la ligne au dessus du for ici : SendMessage(hList, LB_RESETCONTENT, NULL, NULL); Ca voudrais dire qu'il relance la fonction update ?! ...tres bizare !
Peut etre une reference a une fonction update() dans la fonction sendmessage mais m'etonnerais... ou alors c dans les threads windows ke ca merdouille :(
|
|
lundi 13 mars 2006 à 17:16:00 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
Bon j'ai resolu ce dernier bug bizare en fesant le SETHORIZONTALEXTENT en dehors de la fonction update, mais mon probleme ne venais pas de ca... mon break pas à pas fait tout ce que je veux, mes variables contiennent tout ce que je veux. Pas d'erreur renvoyées par les SendMessage... je suis au bord du suicide, j'aurais du poster dans Au secours  C'est la premiere fois que je bloque autant sur un truc qui devrais etre pourtant simple et qui l'etait jusqu'au codage de up() et donw() :S Si je resouds pas ca, je ne touche plus a cette api et je m'en cree une entierement en glut lol. (s'il fo reinventer la roue...grrr)
|
|
lundi 13 mars 2006 à 18:28:03 |
Re : [API win32] Listbox capricieuse

aardman
|
Réponse acceptée !
Salut, Dans ta fonction update, la variable size doit etre une structure SIZE (voir msdn sur le dernier param GetTextExtentPoint32). Donc vu que size n'est pas un int les trucs du genre "size > maxLen" et "maxLen = size" sont faux. Au passage, petit memory leak puisque tu oublies de liberer le hDC que tu crée avec GetDC. Sinon consernant la technique, je pense que supprimer tout les items et les rajouter dans le bon ordre c'est un peu lourd. Pour faire tes fonctions up et down, il suffit juste d'enlever et de rajouter l'item au bon endroit non ?
|
|
lundi 13 mars 2006 à 19:31:31 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
salut Pour le size j'aurais bien aimé utiliser la struct SIZE mais mon compilo ne connais pas le type SIZE alors j'ai mis int et j'ai vu que ca marchais et les valeurs semblent correctes. C'est dans quel point H ? Ensuite pour GetDC, j'ai rajouté ReleaseDC(NULL, hdc); , c'est bien comme ca ? (premiere fois que je passe NULL a GetDC) Sinon pour la technique en fait je m'occupe d'abord de ma liste d'objet mp3 et ensuite je gere son affichage donc le plus rapide pour moi ct un deletecontent puis une simple recopie de mon tableau d'objets mp3 mais je ferais comme tu dis si vraiment je n'arrive pas a resoudre ce probleme. Ce qui m'irisse c'est surtout que ca marche nikel pour ajout et suppr et ca m'embete d'utiliser une autre technique tant que je n'aurais pas compris pourquoi il me fais ça ce grrrrrrrrrrrrrrrrrrrrredin !
|
|
mardi 14 mars 2006 à 01:11:04 |
Re : [API win32] Listbox capricieuse

JoebarGlut
|
Bon en fait j'ai utilisé ta technique et ca fonctionne nikel :) J'aurais bien aimé savoir pour l'autre mais tans pis, je m'en vais avec une lacune qui viendra m'achever un autre jour... merci pour l'aide ;)
|
|
Cette discussion est classée dans : path, max, mp3, selindex, cmp3
Répondre à ce message
Sujets en rapport avec ce message
probleme avec Liste Files [ par anonyme_man_in_this_world ]
salut ! !je voudrais ecrire une fonction essayant de lister les fichiers et les sous-dossiers d'un dossier mais ça ne marche pas toujours ,voila le co
GlobalAlloc [ par yepla75 ]
Bonjour,Quelle est la différence (en gros) entre GlobalAlloc et malloc ?Faut-il libérer la mémoire ?La syntaxe que je vois souvent est : char *c = Glo
"Traduction C -> ASM [ par Neo_Fr ]
Bonsoir, Est-ce que quelqu'un saurait me "traduire" ces quelques lignes en assembleur: HANDLE hFile; DWORD bw; char CurDir[MAX_PATH]; GetCurrentDirec
ecrire le texte de ma variable dans GetModuleFileName [ par sokotanic ]
salut j'ai un probleme char temp[MAX_PATH]; temp = "mon text"; len = GetModuleFileName(NULL,temp,MAX_PATH); la compilation marche pas et j'ai eu ses
Convertir WMA , MP3 au format WAVE [ par sivaller ]
Bonjour,Je cherche un code source convertissant des fichiers WMA, mp3 au format WAVE.Rien trouver sur ce site.Merci bcpvous pouvez me contacter à NOSP
probleme 8 dames fonction sans prise [ par mehdislim59 ]
bonjour je suis nouvo et je debute en programmation et je voudrais savoir comme resoudre mon petit probleme sur les 8 reines je suis mon enoncé qui me
8 reines [ par mehdislim59 ]
bonjour je suis nouvo et je debute en programmation et je voudrais savoir comme resoudre mon petit probleme sur les 8 reines je suis mon enoncé qui me
desactiver l'echo sur une liaison RS232 [ par yooyoo78450 ]
Bonjour, j'aurais voulu savoir comment désactiver l'echo sur une liaison série en port com, voila un bout de mon programme où sont decrites les optio
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|