Listview en couleurs

Soyez le premier à donner votre avis sur cette source.

Vue 9 474 fois - Téléchargée 867 fois

Description

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 / Exemple :


// 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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

deck_bsd
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1 -
Cette source va beaucoup me servir. :D
elflink
Messages postés
34
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
10 novembre 2009
-
Personnellement, j'émets un avis tout à fait positif sur ton code.
Bravo et bonne continuation:)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.