2010-02-17 8 views
4

J'ai une liste avec 3 colonnes. Les deux premières colonnes ont des valeurs et la troisième est encore vide. Je veux savoir, comment puis-je insérer un texte coloré plus tard dans la troisième colonne? Je ne veux pas colorier la rangée entière, seulement la troisième colonne avec des couleurs changeantes.Comment insérer du texte coloré dans un ListView?

Merci d'avance!

Kampi

Répondre

0

@Richard Harrison a la bonne idée en utilisant NM_CUSTOMDRAW. Plutôt que de ré-implémenter la fonctionnalité nécessaire, vous devriez envisager d'utiliser l'un des types dérivés CListView disponibles gratuitement.

Here is a project que je pense répondra à vos besoins.

+0

Merci beaucoup! C'est ce dont j'avais besoin. Merci encore! – kampi

5

Vous pouvez le faire avec le gestionnaire CustomDraw, ref: MSDN Developing Custom Draw Controls in Visual C++.

Fondamentalement, il est assez simple (et MSDN assez long), mais cela se résume à ce qui suit:

ajouter un de ces derniers à l'endroit habituel:

 
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) 

ajouter cette méthode à la classe .

 
void CMyListView::OnCustomDraw(NMHDR* nmhdr, LRESULT* result) 
{ 
    LPNMLVCUSTOMDRAW vcd = (LPNMLVCUSTOMDRAW)nmhdr; 

    switch(vcd->nmcd.dwDrawStage) 
    { 
     case CDDS_PREPAINT : 
     { 
      *result = CDRF_NOTIFYITEMDRAW; 
      break; 
     } 

     case CDDS_ITEMPREPAINT: 
     { 
      vcd->clrText = RGB(255,0,255); //change the colour of the second row. 
      *result = CDRF_NOTIFYSUBITEMDRAW; 
      break; 
     } 
     default: 
      *result = 0; 
      break; 
    } 
    return; 
} 
+0

Salut! En attendant, j'ai trouvé un très similaire à votre code. Mais mon problème est que votre code est en train de colorier chaque seconde ligne, ce que j'ai trouvé colorie la colonne complète. Comment puis-je vérifier quelle est la valeur de ma liste dans une ligne et une ligne données? C'est important parce que je veux colorier le texte en fonction de ce que contient le texte. Merci! – kampi

Questions connexes