CTreeCtrl in CMDIChildFrame - wird nicht erstellt/angezeigt

pibr

Grünschnabel
Hallo zusammen,

ich versuche ein TreeView zu erstellen und das ganze in meinem ChildWindow. Der Compiler meckert nicht, aber das Control wird auch nicht angezeigt oder wird es angezeigt und es steht halt einfach nur nix drin. Habe gerade erst mit der MFC begonnen und steige da teilweise nicht durch. Hier der Source meines Fensters:
Das Control CEdit wird dargestellt!


Code:
 #include <afxwin.h>
 #include <afxcview.h>
 
 class CHelloWnd : public CMDIChildWnd
 {
 public:
 	BOOL Create(LPCTSTR szTitle, LONG style = 0,const RECT& rect = rectDefault,CMDIFrameWnd* pParent = NULL);
 protected:
 	CStatic m_Txt;
 	CTreeCtrl m_TreeView;
 	int OnCreate(LPCREATESTRUCT lpCreateStruct);
 	DECLARE_MESSAGE_MAP();
 };

und cpp
Code:
 #include "App.h"
 #include "Hello.h"
 
 
 BEGIN_MESSAGE_MAP (CHelloWnd, CMDIChildWnd)
 	ON_WM_CREATE()
 END_MESSAGE_MAP()
 
 BOOL CHelloWnd::Create(LPCTSTR szTitle, LONG style,	const RECT& rect, CMDIFrameWnd* parent)
 {
 	LPCTSTR lpszHelloClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_ARROW), (HBRUSH) (COLOR_WINDOW+1), LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(AFX_IDI_STD_MDIFRAME)));
 	return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
 }
 
 //Steuerelemente zeichnen
 int CHelloWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {
 	m_Txt.Create("TEXT",WS_CHILD | WS_VISIBLE | SS_CENTER,CRect(20, 20, 300, 200), this);		  
 	m_TreeView.Create(WS_CHILD|WS_VISIBLE,rectDefault,this,0);
 	return CMDIChildWnd::OnCreate(lpCreateStruct);
 }
 
warum machst du nicht ne neue pDocTemplate in deiner App.

Ich bezweifel ob das funktioniert, so wie du das vorhast.
 
habe jetzt mal ein Rect (groß) und noch ne WS_BORDER übergeben. Das Ding wird auf jeden Fall gezeichnet. Jetzt muss ich nur noch dahinter steigen wie ich da Items reinkriege. So ganz bin ich hinter die InsertItem Methode nicht gestiegen.

Ich möchte nicht mit der Doc/View Struktur arbeiten.
 
Hallo,
Dieser Thread ist zwar schon älter, aber vielleicht trotzdem hilfreich :)
Steh nämlich vor dem selben Problem.
Hab mir ein Treeobject erstellt, das Teil wird auch gezeichnet nur lässt sich da zum Verrecken nix drin einbinden.
Hab mich hier schon wundgesucht und die MSDN's gequält. Alles was ich aber gefunden habe genau so gut wie meine Idee. Einfach die Memberfunktion "insertitem" zu nutzen und der nen CString zu übergeben.

Falls jemand den "Baum" bezwungen hat: How can I do it?:)

Gruss Michael
 
So richtig kann ich gar nicht verstehen, dass es da ein Problem geben soll.
Sowas in der Form sollte doch eigentlich keine Schwierigkeiten machen:
Code:
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if( CWnd ::OnCreate(lpCreateStruct) == -1 )
    {
        return -1;
    }

    m_treeCtrl.Create( WS_BORDER | WS_VISIBLE | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT,
                       CRect(10,10,300, 250), this, 1 );

    HTREEITEM htRoot   = m_treeCtrl.InsertItem(_T("Root"));
    HTREEITEM htChild1 = m_treeCtrl.InsertItem(_T("Child1"), htRoot);

    m_treeCtrl.InsertItem(_T("Child2"), htChild1);

    return 0;
}
 
Moin Moin,
ich weiss ist schwer zu glauben, das es Probleme gibt, gibts aber :-(
Egal was ich im Moment mache ich seh nur nen Leeren Tree...
Ist aber schön zu wissen, das ich die MSDN's dann doch richtig verstanden habe :)
Nach ein paar Stunden schlaf ist mir dann mal die tolle Idee gekommen, nur nen Tree in ner neuen APP zu nutzen und siehe da auf Anhieb. :)) keine Ahnung was ich in der ersten APP falsch mache aber falls jemand weiß was man evt machen kann, das so ein Erscheinungsbild entsteht... Nehm Hilfe gerne an:)

Gruss Michael
 
Hmm, gibt wohl noch nen anderes Problem.
Krieg jetzt alles angezeigt so wie es soll, allerdings soblad ich einmal "DeleteAllItems()" aufrufe ist da nix mehr mit neu füllen. Woran kann das liegen?

Gruss Michael
 
Ok das Prob ist auch gelöst.
Anscheinend muss man nach DeleteAllItems() noch SetRedraw() rufen, Schade das sowas nicht in den MSDNS steht....
 
Zurück