|
begin process at 2008 08 08 21:50:13
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
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
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.
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 de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|
|