IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

ListView et Custom Draw


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut ListView et Custom Draw
    Bonjour,

    J'aimerais modifier la couleur de certains items d'une list view. Pour cela, j'ai trouvé plusieurs articles le faisant grâce au message NM_CUSTOMDRAW.

    J'ai donc quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	case WM_NOTIFY:
    		if(lpnmhdr->hwndFrom = hListView) {
    			LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
    			if(pnm->hdr.code == NM_CUSTOMDRAW)
    			{
    				SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)CustomDrawProc(lParam));
    				return TRUE;
    			}
    et une méthode CustomDrawProc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    LRESULT CALLBACK CustomDrawProc(LPARAM lParam)
    {
    	LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
    	
    	switch(lplvcd->nmcd.dwDrawStage) 
    	{
    	case CDDS_PREPAINT : //Before the paint cycle begins
    		//request notifications for individual listview items
    		return CDRF_NOTIFYITEMDRAW;
    
    	case CDDS_ITEMPREPAINT: //Before an item is drawn
    		if (((int)lplvcd->nmcd.dwItemSpec%2)==0)
    		{
    			//customize item appearance
    			lplvcd->clrText   = RGB(255,0,0);
    			lplvcd->clrTextBk = RGB(200,200,200);
    			return CDRF_NEWFONT;
    		}
    		else{
    			lplvcd->clrText   = RGB(0,0,255);
    			lplvcd->clrTextBk = RGB(255,255,255);
    
    			return CDRF_NEWFONT;
    		}
    		break;
    	}
    return CDRF_DO_DEFAULT;
    }
    Mon programme ne reçois jamais le message CDDS_ITEMPREPAINT !!! C'est un projet C++ win32 (sans MFC).

    Merci pour votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    J'ai trouve ce qui n'allait pas dans mon code. Il faut en fait retourner CDRF_NOTIFYITEMDRAW dans la Window Proc et non pas TRUE.

Discussions similaires

  1. ListView custom
    Par Jazys dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 23/02/2012, 18h06
  2. load img web --> custom adapter --> listview
    Par jonathantarabbia dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 29/04/2011, 16h02
  3. Rebar Chevron + custom draw
    Par Kiristu dans le forum Windows
    Réponses: 0
    Dernier message: 10/12/2009, 00h30
  4. Mise à jours d'une ListView contenant un adapter custom
    Par ghostwan dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 19/09/2009, 18h20
  5. treeview, custom draw et editing
    Par nek_kro_kvlt dans le forum Delphi
    Réponses: 4
    Dernier message: 13/11/2006, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo