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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    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
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    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