CTreeView,CTreeCtrl und Verzeichnisstruktur auslesen
-
Servus,
ich versuche ein Verzeichnis + alle Unterverzeichnisse einzulesen und per CTreeView weiterzuverarbeiten. Um das Verzeichnis rekursiv einlesen zu können, erstelle ich mir eine Klasse mit den Methoden zum einlesen und erbe aus CTreeCtrl und CTreeView die Methoden für die Baumstruktur.
Wenn ich das auf diese Art mache kommt der Fehler: error C2385: 'Directory::delete' ist mehrdeutig
Ich brauch aber auch CTreeView, weil sonst GetTreeCtrl() nicht bekannt ist.
Was kann ich tun?#include <string> #include <afxtempl.h> #include <afxcmn.h> using namespace std; class Directory : public CTreeCtrl, public CTreeView { protected: CFileFind finder; BOOL bResult; HTREEITEM Projekt,IGBT,KK,Lastspiel; string buffer,file; Directory(); public: int Read(string path,int i); ~Directory(); }; Directory::Directory() { } Directory::~Directory() { } int Directory::Read(string path,int i) { GetTreeCtrl().ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_SINGLEEXPAND | TVS_TRACKSELECT); bResult = finder.FindFile(path.c_str(),0); for(i;bResult;i++) { bResult = finder.FindNextFile(); buffer = finder.GetFileName(); if(finder.IsDirectory()) { if(!finder.IsDots()) { GetTreeCtrl().InsertItem(buffer.c_str(),i,i+1); } } else { file = finder.GetFilePath(); Read(file.c_str(),i); } } return 0; }void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); // ZU ERLEDIGEN: Sie können Ihre Baumansicht mit Elementen füllen, indem Sie direkt // auf dessen Baum-Steuerelement über einen Aufruf von GetTreeCtrl() zugreifen. Directory dir; dir.Read("./Projekt/*.*",0); }
-
warum machst du das TreeCtrl nicht einfach als eine unterklasse von deiner TreeViewCtrl ? durch die MV hast du nunmal schnell probleme
du kannst ja beim finden der dateien diese an dem TreeCtrl uebergeben und anzeigen lassen
-
Die Klasse CTreeView hat eine Member Funktion GetTreeCtrl! Mit der bekommst Du den Zeiger auf das CTreeCtrl im CTReeView. Dieses doppelte Ableiten ist falsch und ohne Sinn.
Wenn Du solch eine Klasse Directory hast, die nur einlesen soll, dann müsstest Du ihr doch auch nur einen Zeiger auf das CTreeCtrl übergeben!