Accueil > > > LISTVIEW EN COULEURS
LISTVIEW EN COULEURS
Information sur la source
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-LI STVIEW-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.
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Forum
RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|