Bitmap miniature = icon ou bitmap (comme explorateur win ) [Résolu]

Signaler
Messages postés
138
Date d'inscription
vendredi 10 janvier 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
je cherche a faire des bitmap miniature comme pour l'explorateur windows.

j'ai un dial où je selectionne des fichiers(uniquement des bmp) , je veux les afficher dans une ClistCtrl en miniature.
j'ai reussi en passant par ExtractIcon() à l'indice 0 des bmp.
mais le resultat n'est pas concluant (qualité mediocre, pixel grossier).
alors que les miniatures de windows sont impecables.

dois-je passer par : chargement du bmp original, redimensionnement, affichage dans CListCtrl ???
si oui, j'arrive pas à recuperer un bitmap a partir d'un LoadImage(..)

ps: je suis sous MFC (mais a priori ca change pas grand choses pour ca).
gege

1 réponse

Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
1
Il te faut créé une ImageList qui sera associé à ta ListCtrl :

CImageList * img = new CImageList();

img->Create( -largeur des images-, -hauteur des images-,
ILC_COLORDDB, -nb img ds la liste initialement-,-nb img qui peuvent
être rajouté a la liste-);



Ensuite tu associe cette liste a ton control (prenons m_imgList, la variable qui est associer à ton controle CListCtrl)

m_imgList.SetImageList(img, LVSIL_NORMAL);



Ensuite tu chope le handle vers le bitmap que tu veux ajouter :

HBITMAP hBitmap = (HBITMAP)
::LoadImage(AfxGetInstanceHandle(), -nom du fichier bitmap-,
IMAGE_BITMAP, -largeur-,-hauteur-, LR_LOADFROMFILE |
LR_CREATEDIBSECTION);



Ensuite tu peux ajouter ce bitmap dans ta liste :

CBitmap bmp;

bmp.Attach(hBitmap);

img->Add(&bmp, &bmp);



Puis tu peux ajouter un élément a ta
liste, comme tu fais d'abitute, mais en précisant l'indice auquel se
trouve l'image a associé :

m_imgList.InsertItem(-indice de l'item-, "texte à afficher", -indice de l'image dans la liste d'image- pour le teste : 1);



Voila, et c'est terminé !

tu peux faire un teste en copiant/collant le code, c'est encore le plus simple pour comprendre le principe !


-{ Saifer }-