begin process at 2008 08 08 21:50:13
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

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é: 4 790 / 513

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

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

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

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS