TreeView in SplittedWindow darstellen
-
Ich habe ein Projekt im Explorer-Stil erstellt.
Wie kann ich denn jetzt meinem linken Fenster eine Tree View zuweisen?
Geht das nicht mit dem Ressourcen-Editor?
-
Nein! Das musst Du beim erzeugen des Splitters machen.
Hast Du nicht eine Explorer-Like Applikation durch den Wizard erzeugen lassen?
-
Schau mal bei http://www.c-plusplus.net/forum/topic,4525.html vorbei
-
Doch ich habe beim Erstellen des neuen Projektes eine Anwendung im Stil des Explorers erzeugt.
Nun habe ich auch die Klasse CLeftView in meinem Projekt.
Nur weiß jetzt nicht wie und wo ich die TreeView einbinden kann.
-
Die Einträge in der TreeView hab ich geschafft.
Was mir jetzt noch fehlt sind die + oder - an den Knoten und eine gestrichelte Linie zwischen den einzelnen Elementen.
Weiß jemand wie man das macht?
-
Indem man das Treeview mit den entsprechenden Stilen: TVS_HASLINES und TVS_HASBUTTONS ausstattet.
Selbst als Anfänger sollte man wenigstens etwas in der MSDN lesen...
-
Das ist schon klar welche Stile ich setzen muss.
Aber da ich nirgends den Code finde, indem meine TreeCtrl erstellt wird weiß ich nicht wo ich diese Stile jetzt setzen muss.m_TreeCtrl->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP, CRect(10, 10, 300, 100), this, 0x1005);Ich habe keine Variable ähnlich m_TreeCtrl.
Bei mir erfolgt der Zugriff auf die Baumstruktur über GetViewCtrl() in der Klasse CLeftView.
-
Dein Tree wird als View IMHO mit CSplitterWnd::CreateView erzeugt.
Überschreibe in Deiner CMyTreeView::PreCreateWindow, dort setzt Du
cs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP;
-
Hab jetzt eine neue Klasse CMyTreeView erstellt, und sie von CTreeView abgeleitet. Habe auch PreCreateWindow überschrieben.
pragma once #include "afxcview.h" class CMyTreeView : public CTreeView { public: CMyTreeView(void); ~CMyTreeView(void); protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); }; BOOL CMyTreeView::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP; return CTreeView::PreCreateWindow(cs); }// LeftView.cpp : Implementierung der Klasse CLeftView // #include "stdafx.h" #include "SipromT.h" #include "MyTreeView.h" #include "SipromTDoc.h" #include "LeftView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CLeftView IMPLEMENT_DYNCREATE(CLeftView, CTreeView) BEGIN_MESSAGE_MAP(CLeftView, CTreeView) END_MESSAGE_MAP() // CLeftView Erstellung/Zerstörung CLeftView::CLeftView() { m_pImageListTree = new CImageList; /*create the image list*/ } CLeftView::~CLeftView() { DeleteObject (m_pImageListTree); /*delete the image list*/ } BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { return CTreeView::PreCreateWindow(cs); }Hat aber nicht funktioniert, wenn ich jetzt in CLeftView CTreeView in CMyTreeView umwandle, krieg ich die Fehlermeldung, dass class CMyTreeView nicht bekannt ist.
-
Kann mir jemand weiterhelfen?
-
maRKus23 schrieb:
Kann mir jemand weiterhelfen?
Es wird nervend.
Wenn Dein View CLeftView heißt, dann müsstest Du PreCreateWindow in den CLeftView einbauen.
-
Genau das ist ja mein Problem, das ich nicht weiß wie ich das einbauen kann.