2010-05-25 8 views
1

Envisagez l'Explorateur Windows (ou regedit ou similaire). Sur le côté gauche, il y a une vue en arborescence, et à droite, une vue en liste. Dans tous les cas que je connais, le contenu de la vue de droite reflète les attributs du nœud sélectionné dans le volet de gauche. C'est très bien ... mais pas ce que je veux.Couplage d'un MFC CListCtrl et CTreeCtrl pour obtenir une vue de l'arbre entier, pas seulement un nœud à la fois

Les nœuds de l'arborescence que je souhaite afficher comportent très peu d'attributs (2-3) associés à chaque nœud - une quantité raisonnable à afficher horizontalement sous la forme d'une ligne dans une table. Plutôt que de gaspiller tout cet espace de vue liste sur un seul nœud avec très peu de propriétés, j'aimerais que ma vue liste affiche une table des propriétés de l'arbre entier (comme la partie de l'arbre actuellement développée). Donc, la nième ligne dans la vue de gauche (arbre) correspondra directement à la nième ligne de la vue de droite (liste/table), et j'obtiendrai une bonne vue d'ensemble des propriétés de mon arbre.

Quelqu'un sait-il du code qui fait cela? Je devine qu'associer un CListCtrl à un CTreeCtrl serait le chemin à parcourir, et en quelque sorte outrepassant les fonctions de défilement vertical de sorte qu'ils soient verrouillés ensemble. Je ne suis pas sûr qu'il soit possible de verrouiller les parchemins comme ça ... entre autres choses! Tous les conseils sont les bienvenus :-)

+0

Jusqu'à ce que quelqu'un donne une réponse convaincante ... Je suppose que je pourrais utiliser un CListCtrl, et se moquer de l'aspect de l'arbre à l'aide d'indentation et - et | caractères dans la première colonne de la table. Ce ne sera pas joli, mais il sera plus facile à implémenter. – omatai

Répondre

0

Si vous faites le contrôle de liste dessiner par le propriétaire, il serait trivial de l'aligner avec le contrôle de l'arborescence. Cependant, vous avez toujours le problème de deux barres de défilement qui doivent être synchronisées. Peut-être que vous pourriez capturer les événements de défilement dans un et les copier à l'autre. Une autre option consisterait à ignorer le contrôle de liste et à utiliser un contrôle d'en-tête pour définir vos colonnes, et à dessiner le texte selon vos besoins.

+0

Peut-être que vous pourriez élaborer, ou pointez sur un exemple de code. Je ne pense pas que "owner draw" et "trival" appartiennent à la même phrase ... En tout cas, il n'y a certainement pas besoin de dessiner par le propriétaire - chaque expansion ou contraction de l'arbre définit de manière unique ce qui devrait être dans la liste vue. Tant que les tailles de police sont choisies pour garder l'espacement égal, MFC va tout dessiner pour moi. C'est vraiment juste de synchroniser le défilement qui est le problème, n'est-ce pas? – omatai