Bitmap sur un bouton

Résolu
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 5 oct. 2004 à 20:27
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 - 6 oct. 2004 à 19:39
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2004 à 23:01
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2004 à 11:37
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++
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 oct. 2004 à 20:37
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
5 oct. 2004 à 21:24
?????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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 09:00
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 09:03
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?
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 09:14
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.
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 11:39
oki merci beaucoup brunews......
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 18:11
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 18:12
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?)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 oct. 2004 à 18:23
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++
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 18:27
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
6 oct. 2004 à 19:39
bon probleme résolu (en faisant le bourrin, mais résolu) merci a vous
0
Rejoignez-nous