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 :

probleme avec CTreeCtrl


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut probleme avec CTreeCtrl
    Bonjour,

    J'ai une application qui contient une CtreeCtrl et le probleme est que dés que j'ajoute un element dans cette TreeCtrl il y a une checkBox qui s'incruste avant l'intitulé de l'element ajouté.

    Moi je veux enlever la check box et mettre une image à la place;

    Comment je pourrai regler ca ?

    Khaled

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message
    Bonjour,

    Moi je veux enlever la check box
    salut,
    dans les propriétés de ton Tree Control tu as une option "check boxes" qu'il faut que tu mette a false.


    Citation Envoyé par ksoft Voir le message
    mettre une image à la place;

    pour mettre une image, toujours avec le lien que je t'ai passé hier.. mais dans la 2e page: http://www.functionx.com/visualc/app...s/explorer.htm

    il t'explique comment tu peux faire à partir d'une image bitmap. (bon après c'est en anglais hein..)
    sinon tu as aussi l'option des icones (dans tes ressource faut que tu ajoute les icone que tu veux) donc c'est des ".ico"
    et tu utilise CImageList

    ensuite lorsque tu insert ton item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_monTreeControl.insertItem(nomItem,indiceIconItemReplié,indiceIconItemDéplié,nomItemPere)

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    tiens j'ai posé la question il y a quelques semaines pour les images.
    ca peut peut-etre t'aider

    http://www.developpez.net/forums/d74...con-imagelist/

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    pour mettre une image, toujours avec le lien que je t'ai passé hier.. mais dans la 2e page:
    quel page 2 ? je la trouve pas.

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message
    quel page 2 ? je la trouve pas.
    en bas de la page il y a marqué "explorer" c'est un lien vers une autre page mais je t'ai mis son lien plus haut, au cas ou

  6. #6
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    en fait j'ai ajouté ce code pour afficher des images dans ma CtreeCtrl mais ca ne m'affiche pas les images. Ca m'affiche que le texte. par contre je remarque qu'il y a un decalade du texte, comme si le programme reserve de l'espace pour afficher l'image.

    Voila le code :

    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
     
    TVINSERTSTRUCT  _TreeCtrlElement;
    TVITEM               _ElementTreeCtrl;
    TVITEMEX           _ElementTreeCtrlEx;
    CImageList          ImageListTreeCtrl;
     
    ImageListTreeCtrl.Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_MASK, 1, 1);
    ImageListTreeCtrl.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    m_VolumeList.SetImageList(&ImageListTreeCtrl, TVSIL_NORMAL);
     
    //m_VolumeList.SetExtendedStyle( TVS_EX_DRAWIMAGEASYNC ,   TVS_EX_PARTIALCHECKBOXES  | TVS_EX_DRAWIMAGEASYNC);
    _ElementTreeCtrl.mask    = TVIF_IMAGE | TVIF_TEXT;
    _ElementTreeCtrl.pszText = (LPWSTR)A2W(_ElemenCourantListe);
    _ElementTreeCtrl.iImage  = IDI_ICON1;
     
    _ElementTreeCtrlEx.mask    = TVIF_IMAGE | TVIF_TEXT;
    _ElementTreeCtrlEx.pszText = (LPWSTR)A2W(_ElemenCourantListe);
    _ElementTreeCtrl.iImage    = IDI_ICON1;
     
    _TreeCtrlElement.hInsertAfter = TVI_ROOT;
    _TreeCtrlElement.hParent      = TVI_ROOT;
    _TreeCtrlElement.item         = _ElementTreeCtrl;
    _TreeCtrlElement.itemex       = _ElementTreeCtrlEx;
    m_VolumeList.InsertItem(&_TreeCtrlElement);
    je ne sais pas pourquoi ca ne marche pas

  7. #7
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    C'est bon ca marche. car il falait declarer CImageList comme variable de la classe et non pas une variable locale à la fonction.

    Mais la j'ai un autre probleme car l'image apparait que sur l'element selectionné.

    j'arrive pas à regler ca.

  8. #8
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TVINSERTSTRUCT  _TreeCtrlElement;
    TVITEM               _ElementTreeCtrl;
    TVITEMEX           _ElementTreeCtrlEx;
     
    ...
     
    _TreeCtrlElement.hInsertAfter = TVI_ROOT;
    _TreeCtrlElement.hParent      = TVI_ROOT;
    _TreeCtrlElement.item         = _ElementTreeCtrl;
    _TreeCtrlElement.itemex       = _ElementTreeCtrlEx;
    je comprends pas trop ce que tu fais là ....

    item et itemex sont un "union", tu choisis l'un ou l'autre mais pas les deux ...

    Mais la j'ai un autre probleme car l'image apparait que sur l'element selectionné.
    il faut régler aussi le "iSelectedImage" de TVITEM et mettre le flag "TVIF_SELECTEDIMAGE"

    @+

  9. #9
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    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
     
    TVINSERTSTRUCT  _TreeCtrlElement;
    TVITEM               _ElementTreeCtrl;
    TVITEMEX           _ElementTreeCtrlEx;
    CImageList          ImageListTreeCtrl;
     
    ImageListTreeCtrl.Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_MASK, 1, 1);
    ImageListTreeCtrl.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    m_VolumeList.SetImageList(&ImageListTreeCtrl, TVSIL_NORMAL);
     
    //m_VolumeList.SetExtendedStyle( TVS_EX_DRAWIMAGEASYNC ,   TVS_EX_PARTIALCHECKBOXES  | TVS_EX_DRAWIMAGEASYNC);
    _ElementTreeCtrl.mask    = TVIF_IMAGE | TVIF_TEXT;
    _ElementTreeCtrl.pszText = (LPWSTR)A2W(_ElemenCourantListe);
    _ElementTreeCtrl.iImage  = IDI_ICON1;
     
    _ElementTreeCtrlEx.mask    = TVIF_IMAGE | TVIF_TEXT;
    _ElementTreeCtrlEx.pszText = (LPWSTR)A2W(_ElemenCourantListe);
    _ElementTreeCtrl.iImage    = IDI_ICON1;
     
    _TreeCtrlElement.hInsertAfter = TVI_ROOT;
    _TreeCtrlElement.hParent      = TVI_ROOT;
    _TreeCtrlElement.item         = _ElementTreeCtrl;
    _TreeCtrlElement.itemex       = _ElementTreeCtrlEx;
    m_VolumeList.InsertItem(&_TreeCtrlElement);
    je comprends pas pourquoi tu te compliques autant...
    normalement.. une fois que t'as créé ton CImageList, que tu lui as ajouté tes icones et que tu as fai le "setImageList"...
    pourquoi tu mets tout ca?
    ... là en l'occurence tu n'as qu'un icone... donc normalement si tu ne demande rien il va te la mettre par défaut sur tous les item de ton arborescence... ensuite sinon si t'en as plusieurs il suffit juste d'indiqué l'indice de l'icone dans ta CImageList que tu veux, au moment ou tu fais "insertItem"...
    exemple de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // creation de la CImageList et ajout des icones
    m_imageList.Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_MASK | ILC_COLOR24, 1, 1);
    	m_imageList.Add(AfxGetApp()->LoadIcon(IDI_POSTE));
    	m_imageList.Add(AfxGetApp()->LoadIcon(IDI_SECTEUR));
    	m_imageList.Add(AfxGetApp()->LoadIcon(IDI_DOSSIER));
    	m_imageList.Add(AfxGetApp()->LoadIcon(IDI_FICHIER));
     
    //association treeControl-imageList
    m_treeCtrl.SetImageList(&m_imageList,TVSIL_NORMAL);
    et quand je crée un item

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_treeCtrl.InsertItem("blabla",2,3);
    le "2,3" indique que si l'item n'est pas selectionné il a l'icone Dossier et si il est sélectionné il a l'icone fichier

    ...
    t'as essayé comme ca? ca marche pas?

  10. #10
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    je vais eqqayer ca soir et je te tiendrai au courant

  11. #11
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    pour toi la variable m_treeCtrl est de quel type ?

    car pour moi, elle est de type "CTreeCtrl" et du coup sa fontion "insertItem" contient un seul parametre.

  12. #12
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message
    pour toi la variable m_treeCtrl est de quel type ?

    car pour moi, elle est de type "CTreeCtrl" et du coup sa fontion "insertItem" contient un seul parametre.
    c'est effectivement un CTreeCtrl. et (en tout cas dans mon projet) la fonction insertItem peut contenir un parametre parce que les autre sont valorisés par défaut, mais si tu le souhaite tu peux en mettre plus.

    t'as essayé?

  13. #13
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    je l'assayerai ce soir et je te tiendrai au courant.

    En meme temps j'ai une autre question, car jeveux que dans ma CTreeCtrl lors de l'affichage je veux decaler les sous items des items generale par exemple :

    Item generale : Ville
    Sous items 1 : Paris
    Sous item 2 : Lilles

    comment je pourrai faire ca?

    J'ai essayé hier avec les TVI_ROOT mais ca ne marche pas.

  14. #14
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message

    Item generale : Ville
    Sous items 1 : Paris
    Sous item 2 : Lilles

    comment je pourrai faire ca?
    dans le lien que je t'ai passé il l'expliquait

    c'est la justement que va intervenir le parametre.
    alors pour traiter ton exemple

    ton noeud d'origine c'est "Ville"
    si tu te places sur ta methode InsertItem, tu remarques qu'elle retourne un HTREEITEM.

    tu vas ecrire ton noeud "ville" de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HTREEITEM noeudPrincipal;
    noeudPrincipal = m_monTreeControl.InsertItem("Ville");
    ton noeud "ville" est maintenant associé à "noeudPrincipal"
    ce qui fait que, si tu veux ajouter des noeud fils a "ville" c'est là que les paramètres sont utiles. pour mettre Paris et Lille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m_monTreeControl.InserItem("Paris",noeudPrincipal);
    m_monTreeControl.InsertItem("Lille",noeudPrincipal);
    et ainsi de suite. si tu veux des noeuds fils à paris bah tu va l'associé à un autre HTREEITEM etc..

  15. #15
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    et maintenant si je veux gerer les items et les souitems en meme temps que les images ?

    je peux utiliser la meme fonction InsertItem pour ca ?

  16. #16
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message
    et maintenant si je veux gerer les items et les souitems en meme temps que les images ?

    je peux utiliser la meme fonction InsertItem pour ca ?
    je comprends pas ta question...

  17. #17
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    je veux indiquer l'image de l'element ajouté ainsi que son parent.

    Quel est l'appel de la fonction InsertItem pour faire ca ?

    Je pense que ca devrai marche avec ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HTREEITEM InsertItem(
       LPCTSTR lpszItem,
       int nImage,
       int nSelectedImage,
       HTREEITEM hParent = TVI_ROOT,
       HTREEITEM hInsertAfter = TVI_LAST
    );
    je pense que ca devrai marcher. je vais essayé tous ce ce soir et je te tiendrai au courant.

  18. #18
    Membre confirmé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2009
    Messages : 164
    Par défaut
    Citation Envoyé par ksoft Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HTREEITEM InsertItem(
       LPCTSTR lpszItem,
       int nImage,
       int nSelectedImage,
       HTREEITEM hParent = TVI_ROOT,
       HTREEITEM hInsertAfter = TVI_LAST
    );
    je pense que ca devrai marcher. je vais essayé tous ce ce soir et je te tiendrai au courant.
    je ne comprend pa ce que tu m'a marqué.
    c'est une methode que tu crée toi meme? ou c'est un copié coller que t'as pris d'un autre site?

    pour le parent, je t'ai marqué comment j'ai fais dans mon message precedent, et pour l'image que tu veux mettre à coté je te l'ai dis dans un de mes message un peu plus haut (avec les indice de CImageList) je te dis j'ai mis les information en paramètre.

    si tu le fais d'une autre facon je peux pas t'aider je ne connais que celle la. desolé

    bon courage

  19. #19
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    ok je te tiendrai au courant ce soir.

    Merci pour ton aide

  20. #20
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Par défaut
    Finalement ca marche pour les images.


    Mais pour le decalages des sous items ca ne marche pas.

    mon code est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    HTREEITEM _ParentVolumeList;
    _ParentVolumeList = m_VolumeList.InsertItem(L"Item", 0, 0);
    m_VolumeList.InsertItem(L"Sous_Item", 2, 2, ParentVolumeList);
    ca ne m'affiche pas le sous item et je ne sais pas pourquoi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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