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

MFC Discussion :

Couleur de fond ClistCtrl


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    116
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par d�faut Couleur de fond ClistCtrl
    J'aimerai changer de couleur de fond dans un ClisCtrl alternativement selon la parit� de chaque ligne (ex: vert pour une ligne paire, bleu pour les autres).

    J'ai trouv� comment changer la couleur de fond dans le faq:
    http://c.developpez.com/faq/vc/?page...stCtrlSetColor

    mais je n'arrive pas � suivre mon crit�re de parit�.
    Comment faire pour fixer la couleur d'une ligne ind�pendamment des autres ??

  2. #2
    Membre �m�rite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    D�tails du profil
    Informations personnelles :
    �ge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par d�faut
    Je n'ai pas le temps de tester ma r�ponse, mais une id�e me vient,
    si tu s�lectionnes une ligne en particulier et que tu utilises la m�thode de changement de couleur, peut �tre qu'elle s'appliquera juste � cette ligne.

  3. #3
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    bonsoir pour ton probleme il faut reprende la main sur la fonction drawitem
    pour dessiner soit meme chaque ligne,la listctrl etant ownerdraw fixe.
    j'ai bricol� un exemple rapidement:
    une classe ClistCtrlEx deriv�e de CListCtrl:
    le .h
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #if !defined(AFX_LISTCTRLEX_H__BB73C7E9_F905_4D3A_A0B7_AB9515DA9DA1__INCLUDED_)
    #define AFX_LISTCTRLEX_H__BB73C7E9_F905_4D3A_A0B7_AB9515DA9DA1__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // ListCtrlEx.h : header file
    //
     
    /////////////////////////////////////////////////////////////////////////////
    // CListCtrlEx window
    class CListCtrlEx : public CListCtrl
    {
    // Construction
    public:
    	CListCtrlEx();
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CListCtrlEx)
     
    	//}}AFX_VIRTUAL
       	virtual void	DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    // Implementation
    public:
    	virtual ~CListCtrlEx();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CListCtrlEx)
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    };
    /////////////////////////////////////////////////////////////////////////////
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    #endif // !defined(AFX_LISTCTRLEX_H__BB73C7E9_F905_4D3A_A0B7_AB9515DA9DA1__INCLUDED_)
    le .cpp
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    /////////////////////////////////////////////////////////////////////////////
    // CListCtrlEx
     
    CListCtrlEx::CListCtrlEx()
    {
    }
     
    CListCtrlEx::~CListCtrlEx()
    {
    }
     
     
    BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
    	//{{AFX_MSG_MAP(CListCtrlEx)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CListCtrlEx message handlers
    void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    	// TODO: Add your message handler code here and/or call default
    	if(lpDrawItemStruct == NULL) return; 
     
    	CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    	int nSavedDC = pDC->SaveDC();
     
    	RECT r;
    	CRect rItem( lpDrawItemStruct->rcItem );
    	CBrush* pBrush;
     
    	r.left = lpDrawItemStruct->rcItem.left;
    	r.right = lpDrawItemStruct->rcItem.right;
    	r.top = lpDrawItemStruct->rcItem.top;
    	r.bottom = lpDrawItemStruct->rcItem.bottom;
    	CRect rect(r);
     
    	int nItem = lpDrawItemStruct->itemID;
     
        BOOL bsel =
        (
        	(/*(lpDrawItemStruct->itemAction & ODA_FOCUS) &&*/ (lpDrawItemStruct->itemState & ODS_FOCUS)) ||
    		( (lpDrawItemStruct->itemState & ODS_SELECTED))
        );
     
    	if( bsel )
    	{
    		CBrush brush( RGB(0  ,0  ,255)); // bleue
    		pBrush = pDC->SelectObject( &brush );
     
    		pDC->FillRect(&rect, &brush);
    		pDC->SetTextColor(RGB(255,255,0)); // jaune
    		pDC->SetBkColor( RGB(0  ,0  ,255) ); // bleue
     
    		pDC->SelectObject( pBrush );
     
    	}
    	else
    	{
    // couleur alternative :
    		CBrush brush((nItem %2)==0?RGB(0  ,255,0):RGB(128,128,0));
    		pBrush = pDC->SelectObject( &brush );
    		pDC->FillRect(&rect, &brush);
     
    		pDC->SetTextColor( RGB(0  ,0  ,0));
    		pDC->SetBkColor( (nItem %2)==0?RGB(0  ,255,0):RGB(128,128,0) );
     
    		pDC->SelectObject( pBrush );
    	}
     
        CString s;
        int nNoColumn, nWidthColumn;
       int nNbColumns = GetHeaderCtrl()->GetItemCount();
        int ncx=0;
        LV_COLUMN lvc;
        char szItem[255];
        LVITEM  LvItem;
    	for( nNoColumn = 0; nNoColumn < nNbColumns ; nNoColumn++ )
    	{	        
    		nWidthColumn = GetColumnWidth( nNoColumn );		
    		lvc.mask = LVCF_FMT;        
    		if( GetColumn( nNoColumn, &lvc ) ==0 ) continue;
     
            LvItem.mask=LVIF_TEXT;
            LvItem.cchTextMax=sizeof(szItem);
            LvItem.pszText=szItem;
            LvItem.iItem=nItem;
            LvItem.iSubItem=nNoColumn;
     
            GetItem( &LvItem );
     
            s=LvItem.pszText;
    		if( lvc.fmt & LVCFMT_RIGHT )
    		{	
    			pDC->SetTextAlign( TA_RIGHT );		
    			s += ' ';
    			pDC->ExtTextOut( r.left + nWidthColumn , r.top, ETO_OPAQUE|ETO_CLIPPED, &r, s, NULL );
    		}
    		else
    		{
    			pDC->SetTextAlign( TA_LEFT );
    			s = ' ' + s;		
    			pDC->ExtTextOut( r.left ,r.top, ETO_OPAQUE|ETO_CLIPPED, &r, s, NULL );
     
    		}
            r.left += nWidthColumn;
        }
     
    	pDC->RestoreDC( nSavedDC );
     
    	if( lpDrawItemStruct->itemState & ODS_SELECTED )
    	    pDC->DrawFocusRect( &lpDrawItemStruct->rcItem );
    }
    utilisation d�clarer une variable contr�le sur la ClistCtrl et mettre dans le .h CListCtrlEx.
    J�ai volontairement pris des couleurs fixes dans mon exemple .
    C�est facilement modifiable personnalisable..

  4. #4
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    116
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par d�faut
    D�sol� mais j'ai pas compris comment utiliser ta classe... J'ai fait une variable membre associ�e � la CListCtrl. Et l�, je sais pas comment cr�er la structure LPDRAWITEMSTRUCT (je d�bute!!!).

    Merci

  5. #5
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    et bien tu mets dans un .h cette classe ex: listctrl.h
    et le code dans listctrl.cpp
    dans le .h de ta vue tu rajoutes en haut #include "listctrl.h".
    tu remplaces CListCtrl par CListCtrlEx pour ta variable .
    c'est tout .
    n'oublie pas de specifier que la listctrl est owner draw fixe dans les ressources.

  6. #6
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    116
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par d�faut
    J'ai fait cela, mais il me reste toujours � la compilation :
    "unexpected end of file while looking for precompiled header directive" (ca pointe � la fin de LisCtrlEx.cpp)

    Je n'ai encore jamais eu ce type d'erreur d'o� cela peut il venir?

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    Dans le source de la listctrl il faut mettre :
    #include "stdafx.h" en premier avant les autres includes.


  8. #8
    Membre confirm�
    Inscrit en
    Juin 2004
    Messages
    116
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par d�faut
    Ok ca marche merci beaucoup. Je suis trop nul j'avais oubli� d'inclure le .h au debut du .cpp

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de donn�es
    R�ponses: 5
    Dernier message: 11/09/2009, 10h16
  2. Changer couleur de fond CListCtrl quand disable
    Par Psykotik dans le forum MFC
    R�ponses: 3
    Dernier message: 07/02/2006, 11h56
  3. R�ponses: 4
    Dernier message: 23/06/2004, 14h30
  4. debutant : couleur de fond d'une application direct3D
    Par ptidrone dans le forum DirectX
    R�ponses: 2
    Dernier message: 12/06/2004, 17h08
  5. Changer la couleur de fond de l'�cran
    Par tnk dans le forum x86 16-bits
    R�ponses: 5
    Dernier message: 19/01/2003, 01h37

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