Listview en couleurs

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

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.