Bitmap miniature = icon ou bitmap (comme explorateur win )

Résolu
gege1024 Messages postés 138 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 27 janvier 2009 - 22 déc. 2005 à 09:35
cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 - 26 déc. 2005 à 02:11
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

cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 1
26 déc. 2005 à 02:11
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 }-
3
Rejoignez-nous