Anzeigen Von Verzeichnissen in CTreeCtrl



  • Hallo!
    Ich hab eine SDI Anwendung in der ich eine CFormView benutze... jetzt hab ich ein CTreeCtrlobject zu dieser Form hinzugefügt. Wie kann ich nun Den Datei bzw. Verzeischniss Baum hier anzeigen Lassen
    (bitte nicht nach CodeGuru und/oder Codeproject weiterleiten wills schon selbst machen)
    Danke im **Voraus.

    Valen16 (valen16@binar-pulse.org)
    www.binary-pulse.org**



  • Hallo !

    Wenn du es selber machen willst 😉 , funktioniert das so:

    Zu dem TreeControl legst du eine Membervariable an (ist dann vom Typ CTreeCtr). Mit dieser Membervariable steht dir dann u.a. die Funktion InsertItem(...) zur Verfügung, mit der du dem Baum Elemente hinzufügen kannst. Diese Funktion gibt einen Wert vom Typ HTREEITEM zurück, der die aktuelle Position im Baum beschreibt (du brauchst also auch noch eine Variable von diesem Typ, um den jeweiligen Rückgabewert zu speichern).

    Normalerweise will man ja in so einem Baum eine Verzeichnisstruktur abbilden. Dazu eignet sich CFileFind, um alle Dateien und Unterverzeichnisse eines bestimmten Ordners zu finden.

    In den FAQ findest du ein Beispiel mit CFileFild zur rekursiven Suche (das heisst "alle Dateien eines Ordners finden" oder so ähnlich). Die kann leicht erweitert werden:

    Bei mir heisst sie z.B.

    void CBlabla::ErzeugeBaum(CString cVerzeichnis, HTREEITEM TreeItem)
    {
    ...
    }
    

    - Übergabeparameter an die rekursiv aufgerufene Funktion: 1) den Pfad zum aktuellen Ordner und 2) die Variable vom Typ HTREEITEM (Handle of the inserted item’s parent)
    - am Anfang der Funktion ein neues Element hinzufügen:

    TreeItem = m_Tree.InsertItem(cVerzeichnis, 0 , 0, TreeItem);    // m_Tree ist vom Typ CTreeCtr
    

    Das fügt ein neues Parent-Element (Ordner) im Baum ein (darum auch den Rückgabewert speichern, um zugehörige Childs hinzuzufügen).

    - weiterhin:
    wenn bei der rekursiven Suche (siehe FAQ-Beispiel) ein Ordner gefunden wird, die Funktion erneut aufrufen, wenn eine Datei gefunden wird, die Datei unter dam aktuellen Ordner (Parent) als Child hinzufügen:

    m_Tree.InsertItem(cDateiName, 0 , 0, TreeItem);
    

    Das war es eigentlich auch schon.

    Tschüss


Log in to reply