Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LISTVIEW EN COULEURS


Information sur la source

Catégorie :Application Classé sous : listview, couleurs Niveau : Débutant Date de création : 11/06/2006 Date de mise à jour : 11/06/2006 16:55:30 Vu / téléchargé: 5 672 / 564

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Voici une classe permettant de gérer plusieurs couleurs dans une listview.
Ses fonctions sont limitées à l'utilisation que j'en ai faite dans un autre programme, il est donc largement possible de l'améliorer.
Elle gère uniquement le style Report et ne prend pas en compte les icones.
Certains n'aimeront pas car ils penseront que des classes sont crées pour tout et n'importe quoi.
Je pense cependant qu'elle peut etre un point de départ vers une gestion améliorée des couleurs.
Enfin, merci à vecchio56 pour son code source "PROGRESSBAR DANS LISTVIEW" dont le code est inspiré.
Trouvable ici : http://www.cppfrance.com/codes/PROGRESSBAR-DANS-LISTVIEW-WIN32_24229.aspx
 

Source

  • // ITEM_DRAW : DESSINE LES ITEMS
  • /////////////////////////////////////////////////////////////////////////////////
  • void cNU_ListView::Item_Draw(LPDRAWITEMSTRUCT lpDrawItem)
  • {
  • if(!pm_hlistview) return;
  • RECT rctTemp, rctTemp2;
  • BOOL BSelected = FALSE;
  • int iTemp = 0;
  • HBRUSH hbrTemp;
  • char szTemp[256] = "";
  • ListView_GetItemRect(pm_hlistview, lpDrawItem->itemID, &rctTemp, LVIR_BOUNDS);
  • rctTemp.top = lpDrawItem->rcItem.top; rctTemp.bottom = lpDrawItem->rcItem.bottom; rctTemp.right = 0;
  • rctTemp2 = lpDrawItem->rcItem; rctTemp2.left +=1;
  • hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrBorderColor);
  • FillRect(lpDrawItem->hDC, &rctTemp2, hbrTemp);
  • DeleteObject(hbrTemp);
  • if(ListView_GetItemState(pm_hlistview, lpDrawItem->itemID, LVIS_SELECTED) & LVIS_SELECTED) BSelected = TRUE;
  • for(int a=0; a<pm_iColumnCount; a++){
  • rctTemp.right = rctTemp.left + ListView_GetColumnWidth(pm_hlistview, a);
  • if(!a) {
  • if(BSelected){
  • rctTemp.left += 2; rctTemp.top +=1; rctTemp.bottom -=1;
  • hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrSelBackColor);
  • FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
  • DeleteObject(hbrTemp);
  • SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].clrSelTextColor);
  • rctTemp.left -= 2; rctTemp.top -=1; rctTemp.bottom +=1;
  • } else {
  • hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrBackColor);
  • FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
  • DeleteObject(hbrTemp);
  • SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].clrTextColor);
  • }
  • rctTemp.left += 3; rctTemp.right -=2;
  • if(pm_ItemsNU[lpDrawItem->itemID].szText[0] != '\0') DrawText(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].szText, (int)strlen(pm_ItemsNU[lpDrawItem->itemID].szText), &rctTemp, DT_VCENTER);
  • rctTemp.left -= 3;
  • } else {
  • if(BSelected){
  • rctTemp.top +=1; rctTemp.bottom -=1;
  • if(a == pm_iColumnCount-1) rctTemp.right -=1;
  • hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrSelBackColor);
  • FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
  • DeleteObject(hbrTemp);
  • SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrSelTextColor);
  • rctTemp.top -=1; rctTemp.bottom +=1;
  • if(a == pm_iColumnCount-1) rctTemp.right +=1;
  • } else {
  • hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrBackColor);
  • FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
  • DeleteObject(hbrTemp);
  • SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrTextColor);
  • }
  • rctTemp.left += 3; rctTemp.right -=2;
  • if(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText[0] != '\0') DrawText(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText, (int)strlen(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText), &rctTemp, DT_VCENTER);
  • rctTemp.left -= 3;
  • }
  • rctTemp.left = rctTemp.left + ListView_GetColumnWidth(pm_hlistview, a);
  • }
  • return;
  • }
// ITEM_DRAW : DESSINE LES ITEMS
/////////////////////////////////////////////////////////////////////////////////
void cNU_ListView::Item_Draw(LPDRAWITEMSTRUCT lpDrawItem)
{	
	if(!pm_hlistview) return;
	RECT rctTemp, rctTemp2;
	BOOL BSelected = FALSE;
	int iTemp = 0;
	HBRUSH hbrTemp;
	char szTemp[256] = "";

	ListView_GetItemRect(pm_hlistview, lpDrawItem->itemID, &rctTemp, LVIR_BOUNDS);
	rctTemp.top = lpDrawItem->rcItem.top; rctTemp.bottom = lpDrawItem->rcItem.bottom; rctTemp.right = 0;
	
	rctTemp2 = lpDrawItem->rcItem; rctTemp2.left +=1;
	
	hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrBorderColor);
	FillRect(lpDrawItem->hDC, &rctTemp2, hbrTemp);
	DeleteObject(hbrTemp);

	if(ListView_GetItemState(pm_hlistview, lpDrawItem->itemID, LVIS_SELECTED) & LVIS_SELECTED) BSelected = TRUE;

	for(int a=0; a<pm_iColumnCount; a++){
		rctTemp.right = rctTemp.left + ListView_GetColumnWidth(pm_hlistview, a);
		
		if(!a) {
			if(BSelected){
				rctTemp.left += 2; rctTemp.top +=1; rctTemp.bottom -=1; 
				hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrSelBackColor);
				FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
				DeleteObject(hbrTemp);
				SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].clrSelTextColor);
				rctTemp.left -= 2; rctTemp.top -=1; rctTemp.bottom +=1;
			} else {
				hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].clrBackColor);
				FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
				DeleteObject(hbrTemp);
				SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].clrTextColor);
			}	
			rctTemp.left += 3; rctTemp.right -=2;
			if(pm_ItemsNU[lpDrawItem->itemID].szText[0] != '\0') DrawText(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].szText, (int)strlen(pm_ItemsNU[lpDrawItem->itemID].szText), &rctTemp, DT_VCENTER);
			rctTemp.left -= 3;
		} else {
			if(BSelected){
				rctTemp.top +=1; rctTemp.bottom -=1;
				if(a == pm_iColumnCount-1) rctTemp.right -=1;
				hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrSelBackColor);
				FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
				DeleteObject(hbrTemp);
				SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrSelTextColor);
				rctTemp.top -=1; rctTemp.bottom +=1;
				if(a == pm_iColumnCount-1) rctTemp.right +=1;
			} else {
				hbrTemp = CreateSolidBrush(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrBackColor);
				FillRect(lpDrawItem->hDC, &rctTemp, hbrTemp);
				DeleteObject(hbrTemp);
				SetTextColor(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].clrTextColor);
			}
			rctTemp.left += 3; rctTemp.right -=2;
			if(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText[0] != '\0') DrawText(lpDrawItem->hDC, pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText, (int)strlen(pm_ItemsNU[lpDrawItem->itemID].SubItem[a].szText), &rctTemp, DT_VCENTER);
			rctTemp.left -= 3;
		}
		rctTemp.left = rctTemp.left + ListView_GetColumnWidth(pm_hlistview, a);
	}
	return;
}

Conclusion

Un projet est livré avec la classe pour montrer les utilisations de celle-ci.
Rennomer ListView_Couleurs.ex_ en ListView_Couleurs.exe pour tester l'executable.
Mises à jour selon mes besoins seront surement à venir.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

11 juin 2006 16:55:30 :
- Ajout d'une bordure autour de l'item selectionné. - Récupération facilitée des textes et couleurs des items et sous-items. - Suppression des HBRUSH.

Commentaires et avis

signaler à un administrateur
Commentaire de elflink le 12/06/2006 02:39:58

Personnellement, j'émets un avis tout à fait positif sur ton code.
Bravo et bonne continuation:)

signaler à un administrateur
Commentaire de deck_bsd le 12/06/2006 17:51:38

Cette source va beaucoup me servir. :D

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

gcc et les couleurs !! [ par UncleShu ] Salut je voudrais savoir les autres couleurs en C avec gcc, exemple :printf("\033[1;34m Ecrit en bleu !! \033[0m\n");Merci d'avance ! apres les polices, les couleurs [ par Xs ] salut !!je sais comment on utilise les polices dans une application API, (HFONT) mais pas comment on change sa couleur.j'ai essayer COLORREF machin = utiliser les couleurs [ par psycho ] salut.Comment fait on pour utiliser les couleurs dans la console? J utilise vc++ 6.0merci comment utilise t on les couleurs sous la console [ par psycho ] j aimerais savoir quels sont les instructions qui permettent d incorporer de la couleur sous la console(j utilise visual studio), ainsi que les fichie listview [ par danyce ] kelk'un saurait il se servir d un listview avec visual c++j aimerai connaitre les lignes de code pour le remplir, ca serai cool!merci d avance... Lumières, couleurs, matériaux, normals ... [ par fabienGL ] Bonjour je vous écris car j'écris en OpenGL, tout va bi1 mais je me pose un petit problème pour éditer la couleur de la matière (diffuse, ambiante, sp Créer une palette personalisée de 256 couleurs (couleurs sur 8 bits) [ par orus8 ] Mon projet consiste en la quantification d'une image de 16 milions de couleurs en une image en 256 niveaux de couleurs (et non 256 niveaux de gris). L Au secours ListView !!! :o((( [ par Frederyck ] FrederyckSalut,Alors en fait j'ai créer une appli en VC++ 6.0 avec MFC, avec ma vue basée sur une LIstView, et j'aimerai faire deux choses:tout d'abor Icones [ par wanny ] Je n'arrive pas à afficher des icones en 256 couleurs.Pour une même icone définie en 256 couleurs, quand on l'affiche comme icone d'une boite de dialo fenêtre arrière plan [ par wanny ] Bonjour.DAns une appli, j'ai une ou plusieurs fenêtre(s) graphique (classe fille de CView).Je clique sur un menu de la mainframe pour changer des para


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.