Bitmap sur un bouton

[Résolu]
Signaler
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
salut a tous
bon voila mon probleme. j'ai plusieurs boutons sur lesquels sont mis des bitmaps, cependant, au fur et a mesure de l'execution, ces bitmpas sur les boutons sont suceptibles de changer, alors je voudrais pouvoir les décharger de la mémoire avant de réafficher quoi que ce soit, afin d'éviter de bouffer enormement de memoire pour rien. comment faire ca? merci d'avance...
(j'espere avoir été comprehensible, si je me suis mal exprimé et que c'est difficilement comprehensible hesitez pas a le dire)

13 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Sur les appels suivants:
hbmp = (HBITMAP)LoadImage(hInst,....);
hold = SendMessage(bouton1, BM_SETIMAGE,
(WPARAM)IMAGE_BITMAP,
(LPARAM)(HANDLE)hImage);
DeleteObject(hold);

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
ah oui excuse j'ai fait du copier coller depuis ton code, a ne jamais faire on se gourre a tout coup.

hbmp = (HBITMAP)LoadImage(hInst,....);
hold = SendMessage(bouton1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)hbmp);
DeleteObject(hold);

ciao...
BruNews, MVP VC++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Procéde de la meme manière que pour affciher le premier sur chaque bouton, et n'oublie surtout pas de supprimer tout les objets que tu utilises.
La mémoire restera ainsi quasi inchangée.

Shell
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
?????tu pourrais etre un peu plus explicite stp? pour le premier j'ai fait:

HBITMAP hImage = (HBITMAP)LoadImage(hInst, 
     		         MAKEINTRESOURCE(IDB_BITMAP1), 
    		         IMAGE_BITMAP, 0, 0,
                  	         LR_CREATEDIBSECTION);

SendMessage(bouton1, BM_SETIMAGE, 
                       (WPARAM)IMAGE_BITMAP, 
       (LPARAM)(HANDLE)hImage);


je dois faire quoi quand je veux remplacer par une autre image?

hImage je m'en fous je le réutilise apres pour realoader une nouvelle image ou reloader les autres boutons, mais je veux libérer la mémoire utilisée par le bouton, parce que je sais pas comment faire, et pour l'instant je l'ai pas fait, donc je reload comme un bourrin par dessus et c'est super lourd en memoire, mais je sais pas comment je dois faire pour la libérer, tu pourrais me mettre le code vite fait pour voir ce que je dois faire stp? (jai essayé d'expliquer plus clairement parce que apperement je l'avias pas fait le premiere fois vu ke ta reponse etait deja ce que je savais plus ou moins)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
ca efface l'objet anciennement chargé alors k'il y en a un autre par dessus? il arrive a le détcter? putain plus je fais d'APIs et plus je trouve ca bien foutu.
un grand merci a vous deux
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
oups pardon j'avais mal lu ce que t'avais écrit.
bon donc je supprime mon ancienne image avec

hold = SendMessage(bouton1, BM_SETIMAGE,
(WPARAM)IMAGE_BITMAP,
(LPARAM)(HANDLE)hImage);
DeleteObject(hold);

et ensuite je load ma nouvelle image. donc il me faut un HWND hImage par bouton distinct?

donc ensuite

hImage = LoadImage (...);
SendMessage (bouton1, ....);

c'est ca?
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
euh....en fait j'ai un peu de mal a capter.....
c'est moi qui avait mal lu, ou c'est toi qui a mal ecrit?
tu a fait hbmp = LoadImage (...);
et ensuite SendMessage (......hImage);

tu voulais mettre SendMessage (.....hbmp); ?????

(suis pas sur vu que j'ai pas trop assimilé, mais je suppose, ca serait plus logique...)

donc si c'est ca j'avais mal lu, mais c'etait une bonne chose lol.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
oki merci beaucoup brunews......
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
euh question toute bete.....
si je fais
hbmp = (HBITMAP)LoadImage(hInst,....);
SendMessage(bouton1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)hbmp);

hbmp = (HBITMAP)LoadImage(hInst,....);
hold = SendMessage(bouton1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)(HANDLE)hbmp);
DeleteObject(hold);

donc je met mon image, puis je la remet en effacant l'ancienne, ca va faire quoi? ca va rien me mettre ou ca va quand meme me mettre ce qu'il faut?

ca a l'air débiel comme ca, mais j'ai 12 boutons a gérer qui ont une texture par défaut, donc mon algo applique la texture par défaut a tous les boutons, puis analyse les boutons au cas par cas, mais j'ai l'impression (peux pas vraiment vérifier la comme ca, mais je suppose que le probleme est la) que si la texture par défaut est déja affichée et que j'essaie de la réafficher ca l'efface completement...c'est ca ou mon probleme est ailleurs? merci d'avance
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
et si c'est ca, je pense que la solution doit etre de récupérer l'ID de la bitmap qui est dans le bouton et de les comparer, comment je fais ca (si la solution est bien la?)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Enfin si c'est juste pour des boutons alors ce sera surement de petits bimaps. A ta place je ferai un tableau de HBITMAP, tu le remplis au chargement de la fenetre et tu affectes sur les boutons selon besin. Tu liberes chaque element du tableau au dechargement de la fenetre.

ciao...
BruNews, MVP VC++
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
euh......j'ai environ 200 bitmaps différents......donc le tableau a charger a la main.....et a chaque clic sur un noeud d'un tree view, je dois charger les bitmaps de mes 12 boutons, ceux qui n'en ont pas définies prennent la texture par défaut.....dans mon algo j'ai fais un vector de "boutons", ou chaque élément du vector contient les propriétés du bouton......donc je me suis dis que la meilleure solution etait celle que j'ai choisi, c'est a dire charger les éléments par défaut a chaque clic sur un élément du tree view puis ensuite fouiller le vector élément par élément puis afficher sur le bouton qui va bien a chaque élément
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
bon probleme résolu (en faisant le bourrin, mais résolu) merci a vous