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]Pb d'édition dans un CTreeCtrl ???


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [MFC]Pb d'édition dans un CTreeCtrl ???
    Slt le monde,

    Voilà mon souci. J'ai une CTreeView dans lequel je manipule un CTreeCtrl en ajoutant après la racine un ou plusieurs enfants qui peuvent avoir eux-mêmes un ou plusieurs enfants...

    J'aimerais pouvoir éditer dans mon arborescence, le noms de tous ces items enfin déjà un ça serait bien

    J'ai créé la fonction OnEditLabel() telle que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    CTreeCtrl& Tree = GetTreeCtrl();
     
    // Make sure the focus is set to the tree control.
    Tree.SetFocus();
     
    // Show the edit control on the label of the root item.
    CEdit* pEdit = Tree.EditLabel(Tree.GetSelectedItem());
    ...
    Et là j'suis un peu bloqué puisque je récupère un CEdit sur l'item qui est sélectionné mais je sais pas comment modifier en "live" le texte de cet item

    Quelqu'un aurait-il une ptite idée ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    pEdit->SetWindowText("blabla") non?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ca OK si tu connais le nom à mettre dans l'arbre !!!

    Mais dans mon cas, j'aimerais pouvoir choisir au moment où je le sélectionne. C'est comme quand tu ouvres un explorateur sous Windows: tu peux modifier le nom de tes dossiers dans l'arborescence en cliquant dessus et qlqs secondes après le label s'illumine et un curseur se place pour tu changes le texte. C'est ce mécanisme que je cherche

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 106
    Points : 113
    Points
    113
    Par défaut
    Salut,
    je ne crois pas que ça fasse parti des possibilités de CTreeCtrl. Il doit falloir utiliser des CTreeCtrl composés de CEdit ( voir www.codeproject.com).
    Ou bien afficher une boite de dialogue et le texte sur l'arbre se modifie en même temps que dans la boite de dialogue mais c'est pas trés "beau" comme solution.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Alors ça c'est embêtant

    Mais quelle est alors l'utilité d'une fonction telle que EditLabel() ???
    Je pensais qu'elle pouvait me permettre de modifier directement le texte d'un item du CTreeCtrl !!!

    J'ai jeté un oeil sur codeproject et apparement il semblerait que certains utilisent cette fonction...

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2002
    Messages : 106
    Points : 113
    Points
    113
    Par défaut
    Je ne connaissais pas cette fonction, mais une finalement elle faisait ce que je te disais:

    Citation Envoyé par MSDN
    CEdit* EditLabel( HTREEITEM hItem );
    Return Value
    If successful, a pointer to the CEdit object that is used to edit the item text; otherwise NULL
    Seulement, lorsque tu récupères le CEdit, tu dois juste pouvoir faire SetDlgItemText mais ça résoud pas ton problème car tu dois connaitre ton texte quand même. Alors je sais pas si tu pourras l'utiliser.

    Si tu arrives à t'en servir, pourras-tu mettre un bout de ton code, ça pourra peut-être me servir plus tard.

    Merci

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Bon c'est un vieux pb que j'avais mais j'ai réussi à trouver un code assez sympa qui permet d'éditer un élément d'un CTreeCtrl. Je le poste car il me semble que certains étaient intéressés à l'époque

    Tout d'abord utiliser l'option de style TVS_EDITLABELS lors de la création de l'arbre, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BOOL CProjectTreeView::PreCreateWindow(CREATESTRUCT& cs)
    {
    	BOOL Res  = CTreeView::PreCreateWindow(cs);
    	cs.style |= TVS_FULLROWSELECT |TVS_EDITLABELS | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS;
    	return Res;
    }
    Ensuite il faut utiliser les messages handlers TVN_BEGINLABELEDIT et TVN_ENDLABELEDIT qui donnent lieu aux fonctions suivantes:
    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
     
    ...
    void CProjectTreeView::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
    	// TODO: Add your control notification handler code here
     
    	CTreeCtrl& Tree = GetTreeCtrl(); //backup of the tree
     
    	// Limit text to 127 characters
        Tree.GetEditControl()->LimitText(127);
     
    	*pResult = 0;
    }
    ...
    void CProjectTreeView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        *pResult = TRUE;
    }
    Voilà j'espère qui ça en aidera quelques uns...

    Référence: http://www.codeguru.com/treeview/allow_edit.shtml

    Suffisait juste de bien chercher

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  2. [MFC] Selection dans un CTreeCtrl et bi-écran
    Par Grimdol dans le forum MFC
    Réponses: 4
    Dernier message: 08/06/2006, 16h01
  3. Réponses: 3
    Dernier message: 28/01/2004, 14h55
  4. [MFC]Ecrire du texte dans un rectangle
    Par zaz16 dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2003, 10h31
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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