2 x CControlBar mit CTreeCtrl und CListCtrl
-
Hallo Leute, ich komm im Moment nicht weiter
Ich habe zwei CControlBars, in einer ist einer CTreeCtrl und in der anderen CListCtrl. Für CTreeCtrl und CListCtrl habe ich jeweils eine eigene Klasse. bei einem klick auf einem Item im Tree sollen Spaltenüberschriften in der Liste (CListCtrl) gesetzt werden. Beim Klick komm ein Fehler mit einer Unbehandelten Ausnahme, ich weiß aber nicht wieso.
Auszug aus dem Tree Klasse:
... m_nodeList.LoadHeader(); ...Auszug aus dem List Klasse:
... void CMeineListe::LoadHeader() { SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT); m_imagelist.Create(16, 16, ILC_COLOR24|ILC_MASK, 20, 4); CBitmap bitmap; bitmap.LoadBitmap(IDB_LIST_ICONS); m_imagelist.Add(&bitmap,RGB(255,255,255)); SetImageList(&m_imagelist, LVSIL_SMALL); InsertColumn(0, _T("Status")); InsertColumn(1, _T("ID")); InsertColumn(2, _T("Location")); ... } ...Der Fehler kommt gleich bei
SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT);Danke schon mal an alle!!!
-
Nach deiner Beschreibung würde ich sagen, das dein Objekt noch nicht erstellt wurde. Schau mal ob dein ListCtrl ein gültiges Handle besitzt.
Gruß
-
ich wollte nicht nerven, aber nach 6 Stunden Handle habe keine nerven mehr.
Kann mir bitte einer ein Handle-Beipiel für die CListCtrl zeigen, für die Problematik von oben.
DANKE!!!
-
CTreeCtrl und CListCtrl sind in getrennten klassen, und die Controlbars haben auch eigene klasse, und es ist eine MDI anwendung, d.h. ich hab keine ID für die liste in der resource.h
-
Hier findest Du eine große Vielfalt von Vorbildern, vor allem auch weiter entwickelte Controls als die im MFC-Standard.
http://www.codeproject.com/script/articles/subcat.asp?id=3
z.B.:
http://www.codeproject.com/listctrl/listctrldemo.asp
http://www.codeproject.com/treectrl/EditTreeCtrl.asp
-
Danke Erhard Henkes!
aber von codeproject.com habe ich mir heute schon fast alle beispile mit CListCtrl angeschaut, die meisten basieren auf dialogen. Aus denen werde ich nicht schlau, da schaltet mittlerweile mein Gehirn auf stur. Wenn ich LoadHeader() mit einem Button was auf der selben CControlBar sich befinden wie CListCtrl dann geht es bei mir auch, nicht aber wenn es auf zwei verschiedenen sind.
-
Wenn ich auf etwas in einer zweiten Klasse zugreifen soll, benötige ich zunächst einen Zeiger auf diese Klasse, typisches MFC-Beispiel Doc- und View-Klasse: http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel7.htm
void CTest_View::OnDraw(CDC* pDC) { CTest_Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //Erstes Quadrat zeichnen: pDC->MoveTo(pDoc->ErstesQuadrat); pDC->LineTo(pDoc->ErstesQuadrat.x + pDoc->Laenge, pDoc->ErstesQuadrat.y); pDC->LineTo(pDoc->ErstesQuadrat.x + pDoc->Laenge, pDoc->ErstesQuadrat.y + pDoc->Laenge); //...
-
viel dank für eure mühe, aber ich bin jetzt total verwirt.
PS: event. sagt euch das was:
- this 0x00346df4 {CMeineListe hWnd=0x00000000 {unused=??? }} CMeineListe * const - CListCtrl {CListCtrl hWnd=0x00000000 {unused=??? }} CListCtrl - CWnd {CWnd hWnd=0x00000000 {unused=??? }} CWnd + CCmdTarget {CCmdTarget} CCmdTarget - m_hWnd 0x00000000 {unused=??? } HWND__ * unused CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden int ...
-
Dein this ist ein CListCtrl, abgeleitet von CWnd, abgeleitet von CCmdTarget, abgeleitet von CObject...
Was verwirrt Dich?
-
MeinFenster.cpp
int CMeinFenster::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... const DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT; if (!m_nodeList.Create(dwStyle,CRect(0,0,0,0),&m_cont,2)) return -1; //m_nodeList.LoadHeader(); <- hier leuft es ohne Probleme ... m_cont.AddComponen(&m_nodeList); ... }MeineListe.h
... class CMeineListe : public CListCtrl { public: CMeineListe(); virtual ~CMeineListe(); void LoadHeader(); ... };MeineListe.cpp
... void CMeineListe::LoadHeader() { SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT); m_imagelist.Create(16, 16, ILC_COLOR24|ILC_MASK, 20, 4); CBitmap bitmap; bitmap.LoadBitmap(IDB_LIST_ICONS); m_imagelist.Add(&bitmap,RGB(255,255,255)); SetImageList(&m_imagelist, LVSIL_SMALL); InsertColumn(0, _T("Status")); InsertColumn(1, _T("ID")); InsertColumn(2, _T("Location")); ... } ...MeinTree.h
... #include "MeineListe.h" class CCMeinTree : public CTreeCtrl { ... public: CMeinTree(); virtual ~CMeinTree(); CMeineListe m_nodeList; ...MeinTree.cpp
void CMeinTree::OnLButtonDown(UINT nFlags, CPoint point) { HTREEITEM hItem = GetSelectedItem(); if (hItem != NULL) { CString szItem = GetItemText(hItem); if (szItem == "Index") { m_nodeList.LoadHeader(); } } CTreeCtrl::OnLButtonDown(nFlags,point); }Ich glaub ich bin gedanklich zu sehr festgefahren.
Dass es falsch ist, habe ich schon verstanden, aber was muss wo rein damit es läuft?