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 :

[MFC] couleurs colonne clistctrl


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut [MFC] couleurs colonne clistctrl
    Bonsoir,

    J'aimerais savoir s'il est possible de changer la couleur du fond dans le titre des colonnes d'une clistctrl. SetBkcolor ne modifie que la couleur de fond du texte dans le tableau, et pas dans les titres...

    Merci,
    shin

  2. #2
    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

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut
    Bonjour,
    je vien de voir et tester le code que tu m'a proposé...
    J'imagine que ka fonction à modifier est bien 'CHeaderCtrlEx::OnPaint()'

    Avec ça, je parviens au mieux à modifier la couleur de fond autour du texte dans les titres des colonnes (seulement si j'enlève la ligne dc.SetBkMode(TRANSPARENT)), mais le reste de la barre de titre reste gris...

    J'ai fais plusieurs tests, mais je ne parvien pas à changer cette couleur...
    Est ce normal ou est ce que j'ai oublié quelque chose?

  4. #4
    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
    drawframecontrole utilise les couleurs standards pour dessiner le bouton...
    a ce moment la il faudra peut etre passer par la solution manuelle de redessiner soit meme le bouton ou d'utiliser un bitmap..
    voir par exemple CDC::FrameRect .

  5. #5
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut
    ouah ça m'a pas l'air simple tout ça...
    Bon ben maintenant à moi de trouver la meilleure méthode.

    En tout cas, merci beaucoup pour ton aide Farscape.
    Tu es toujours là pour proposer des solutions, c'est sympa.

  6. #6
    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
    salut,
    j'ai modifié ma classe pour rajouter le dessin du header entierement customisé.
    j'ai copié l'apparence de outlook (flat header).
    le projet est à jour.


  7. #7
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut
    ouah, c'est trop bien ce que tu as fait

    Malheureusement, je galère depuis tout à l'heure pour l'intégrer à mon code... Je suis dans une dialog box, et c'est peut être ce qui me cause des soucis...

    Soit visual plante à la compilation car il ne connait pas GetListCtrl()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CListCtrl& theCtrl = GetListCtrl();
    Et si je fais juste au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CListCtrl theCtrl;
    Alors le prog plante à l'exécution, ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CHeaderCtrl* CListCtrl::GetHeaderCtrl()
    {
    	ASSERT(::IsWindow(m_hWnd));
           [...]
    }
    Voilà je sais pas si c'est normal ou si je suis juste à la masse...

  8. #8
    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
    si tu es dans une dialogue box tu n'as pas besoin de GetListCtrl(); qui est utilisé uniquement avec une CListView ,toi tu utilises une CListCtrl
    regarde le post it faq ,la seule chose que tu dois faire c'est le sublass dans la fonction PreSubclassWindow().


  9. #9
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut
    Bonjour, voilà désolé pour le temps de réaction mais les fêtes de noël imposent la pause

    Voilà, je crois que je n'ai pas compris quelque chose, parce que je n'arrive pas très bien à utiliser ton exemple...

    Dans mon .h de ma dialogbox, j'ai ces éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    COLORREF m_cBkColor[3];
    	COLORREF m_cTxtColor[3];
    	CHeaderCtrlEx m_HeaderCtrl;
    	void SetLineColor(COLORREF Bkclr,COLORREF TxtColor,bool bLinePair=true)
       {
          m_cBkColor[!bLinePair]=Bkclr;
          m_cTxtColor[!bLinePair]=TxtColor;
       }
    ainsi que la définition de la classe CHeaderCtrlEx...

    Dans le .cpp associé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        List.ModifyStyle(0,LVS_REPORT);
        for (int i=0; itv != listventes.end();i++, itv++)
        {
            prodList.InsertItem(LVIF_TEXT|LVIF_STATE, i, 
    			"txt", (i%2)==0?LVIS_SELECTED : 0, LVIS_SELECTED,0, 0);
    		prodList.SetItemText(i, 1, "txt";
    		prodList.SetItemText(i, 2, "txt"); //[etc.]
        }
        m_HeaderCtrl.SubclassWindow(List.GetHeaderCtrl()->m_hWnd); 
        m_HeaderCtrl.SetBackGround(RGB(89,147,195),RGB(0,0,0));
        m_HeaderCtrl.SetTextColor(RGB(255,255,255),RGB(255,255,255));

    j'ai essayé de faire une fonction PreSubclassWindow() dans la dialogbox, mais ca ne fonctionne pas, le code ci dessus est le seul moyen d'avoir les titres des colonnes colorés... Et si je mets l'appel a 'SubClassWindow' avant les insertions dans le tableau, le programme plante.
    Ai-je oublié quelque chose d'important? En tout cas pour le moment je ne maitrise pas vraiment le système...

    De même, je ne parviens pas à mettre une ligne colorée sur deux comme dans ton exemple. J'ai essayé plusieurs choses, comme utiliser la fonction SetLineColor, modifier les flags dans la fonction Modifstyle (si je mets les même que toi, ça plante également), et utiliser le i%2 lors de l'ajout de sous-items dans le tableau, mais ça ne marche pas vraiment...

    Voilà, merci d'avance pour vos réponses.
    shin

  10. #10
    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
    salut,
    le PreSubclassWindow() c'est pas sur la dialogbox mais sur la classe listctrl elle meme ,relis ce post:
    http://www.developpez.net/forums/vie...466390#2466390

  11. #11
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 19
    Par défaut
    Oui j'avais bien lu, mais je ne suis peut être pas allé assez loin...

    Est ce que cela veut dire que je dois créer une classe
    CCustomListCtrl : public Clistctrl
    avec come attribut m_HeaderCtrl, et ensuite créer un objet CCustomListCtrl dans mon dialogbox a la place d'un Clistctrl simple?

    :

  12. #12
    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
    Citation Envoyé par shiin
    Oui j'avais bien lu, mais je ne suis peut être pas allé assez loin...

    Est ce que cela veut dire que je dois créer une classe
    CCustomListCtrl : public Clistctrl
    avec come attribut m_HeaderCtrl, et ensuite créer un objet CCustomListCtrl dans mon dialogbox a la place d'un Clistctrl simple?

    :
    oui c'est ça !!!
    crée la class CCustomListCtrl par classwizard en lui indiquant la classe de base CListCtrl.

Discussions similaires

  1. [MFC] CProgreesCtrl et CListCtrl
    Par VitamineC dans le forum MFC
    Réponses: 6
    Dernier message: 21/04/2006, 22h31
  2. [MFC] Couleur de fenêtre d'origine
    Par Luffy Duck dans le forum MFC
    Réponses: 4
    Dernier message: 26/01/2006, 14h13
  3. Réponses: 1
    Dernier message: 07/12/2005, 15h21
  4. Réponses: 6
    Dernier message: 07/09/2005, 20h31
  5. [MFC] selection ligne CListCtrl
    Par abignon dans le forum MFC
    Réponses: 3
    Dernier message: 25/06/2004, 12h56

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