Contrôle TreeListView
-
28-10-2019 - |
Question
Je dois implémenter le contrôle TreeList de la même manière que dans Process Explorer. Je suis assez novice dans l'interface graphique et je n'ai pas écrit de contrôles aussi compliqués.
Comme je le vois dans Process Explorer, il existe une TreeListWindowClass, qui contient des enfants: 2 en-têtes, 3 barres de défilement (l'une d'elles est invisible?) Et 1 statique (place entre les barres de défilement visibles). Si je comprends bien, le contrôle principal dessine tous les éléments à l'intérieur de lui-même. De plus, je n'ai pas trouvé mfcxxx.dll dans les dll attachées.
Question 1: quel cadre vaut-il mieux utiliser? Il y a: MFC, WTL, WinAPI simple… J'ai jeté un coup d'œil à cette implémentation http://www.codeguru. com / cpp / controls / treeview / classes / article.php / c13167 et a été confondu avec plus de 8000 lignes de code dans un fichier cpp avec d'énormes structures (l'une d'elles contient 80 membres). C'est simple WinAPI (et C sans ++). Je veux vraiment utiliser le style POO.=)
Question 2: Quelle devrait être la conception de haut niveau de ce contrôle? Pouvez-vous expliquer sans détails comment ce contrôle doit être conçu?
Mes limitations: C ++, VS10, OS: Vista et supérieur.
Merci d'avance
La solution
Je l'ai fait récemment et j'ai utilisé l'arborescence multi-colonnes de http:// www.mimec.org/articles/mfc/mctree
C'est assez basique, mais il a répondu à mes besoins et est assez compact.Il fournit une classe CColumnTreeView
qui est une sous-classe de CView
- donc il fonctionne correctement avec le modèle CDocument / CView standard de MFC.
Autres conseils
Vous pouvez trouver l'équivalent exact de la "Vue en liste arborescente" de Process Explorer à partir de la source de Process Hacker (ce qui est beaucoup meilleur IMHO.)
Qt est une bibliothèque qui offre un QTreeWidget entièrement fonctionnel qui ressemble àil répond aux exigences de votre programme.
DevExpress a d'excellents contrôles de liste d'arbres, mais ils sont écrits en C #.Cependant, vous pouvez les cibler à l'aide de C ++ / CLI ou de C ++ géré.Je ne suis donc pas sûr que vous puissiez gérer votre application.Alors peut-être que cela ne sera peut-être pas si utile.
En ce qui concerne les contrôles gratuits de la liste d'arbres, j'essaie de m'en éloigner, en raison de bugs et d'un manque de support.