salut67
Messages postés27Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention 1 novembre 2018
-
13 sept. 2014 à 20:34
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 2022
-
19 nov. 2014 à 17:21
Bonjour,
(en C sous CodeBlocks, pas de MFC, pas de Visual C++...)
je galère depuis hier pour insérer une icône dans un subitem d'une listview. Après moultes recherches sur internet, je pense avoir trouvé tout ce qu'il faut, mais aucune image ne s'affiche. Et je n'arrive pas à trouver un exemple complet que je pourrais décortiquer. Si quelqu'un peut m'en dénicher un, ou bien me dire où je me trompe, je lui en serais bien reconnaissant.
case WM_CREATE: { HIMAGELIST hListIcon = 0; hListIcon = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_MASK, 0, 1); // retour != NULL HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_COPY)); // retour != NULL r = ImageList_AddIcon(hListIcon, hIcon); // retour != -1 hListView = CreateWindow(WC_LISTVIEW, NULL, WS_CHILD | WS_VISIBLE | LVS_REPORT, 20, 50, 750, 400, hWnd, NULL, hInstance, NULL); ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES | LVS_REPORT); HIMAGELIST p = ListView_SetImageList(hListView, hListIcon, LVSIL_NORMAL); // retour NULL car c'est la première affectation, c'est normal LVCOLUMN lvc = { LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH | LVCF_FMT }; lvc.fmt = LVCFMT_LEFT; for (i = 0; i < 2; i ++) { lvc.cx = 100; lvc.pszText = (PCHAR)TEXT("A"); ListView_InsertColumn(hListView, i, &lvc); } LVITEM lvi = { LVIF_TEXT | LVIF_IMAGE }; for (i = 0; i < 2; i ++) { lvi.iItem = i; lvi.iSubItem = 0; lvi.pszText = (PCHAR)TEXT("Exemple"); lvi.iImage = r; ListView_InsertItem(hListView, &lvi); for (j = 0; j < 2; j ++) { lvi.iItem = i; lvi.iSubItem = j; lvi.pszText = (PCHAR)TEXT("Remplace"); lvi.iImage = r; ListView_SetItem(hListView, &lvi); } } break; }
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 13 nov. 2014 à 19:22
Salut,
Je pense que tu devrais ajouter le style LVS_OWNERDRAWFIXED et utiliser la fonction DrawIcon() dans ta fonction de dessin de la listview. Ainsi tu pourras afficher l'icone dans le subitem ou les subitems que tu veux. Ta fonction sera appelée en réponse au message WM_NOTIFY chaque fois que ta listview a besoin d'être redessinée. Voir la MSDN pour plus de détails. Grâce à Google, tu trouveras des exemples en tapant LVS_OWNERDRAWFIXED.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 18 nov. 2014 à 22:31
Salut,
Ton problème est surement du à la résolution de l'image (bits par pixel) non supportée,
sinon, y'a plus simple, (sans ownerDraw et sans loadIcon)
Utiliser ImageList_LoadImage() qui contient dans ses parametres la taille d'une image dans la liste d'images qu'il charge lui-même
Suffit ensuite de faire un SendMsg LVM_SETIMAGELIST
Puis d'utiliser le iImage de LVITEM qui est l'indice de l'image qu'on veut afficher.
On peut aussi coupler avec une fonction CustomDraw pour la couleur des items, la fonte, ect...