Elemente für Strukturansicht
-
Hallo,
ich möchte folgendes realisieren:
Aus einer Datei lade ich ein Inhaltsverzeichnis. Dies besteht aus dem Eintrag und einem vorangestellten Nomenklaturschlüssel, wie z.B. 1.2.3.4.6.9 Erster Vers. Die verschiedenen Einträge werden aufgeschlüsselt und in einem entsprechendem Listenelement in einer geordneten verketteten linearen Liste gespeichert. Diese Liste möchte ich in einem Strukturansichtelement ausgeben, so daß ich eine Darstellung der Form:1.Eintrag
1.Untereintrag
2.Untereintrag
1.Unter...
2.Eintrag
1.....
.
.
.
bekomme. Mein Problem ist jetzt, daß ich die HTREEITEM-Elemente, wie z.B. hWurzel, nicht über eine Funktion erschaffen kann. Also mir z.B. Elemente über eine Schleife oder so erschaffen kann, die vom Typ HTREEITEM sind, wie z.B.
HTREEITEM Vers1
HTREEITEM Vers2
HTREEITEM Vers3
HTREEITEM Vers4
.
.
.
Hat jemand eine Idee wie man das bequem realisieren kann? Und was ist der Typ HTREEITEM eigentlich genau, in meiner MSDN steht dazu nichts genaueres?
Danke schon mal für Eure Hilfe.
-
HTREEITEM ist ein Verweis auf ein Element.
Wenn Du z.B. CTreeCtrl::InsertItem benutzt, bekommst Du so ein HTREEITEM zurück. Somit kannst Du darüber das zuvor erzeugte Element ansprechen (z.B. bei CTreeCtrl::SetItemImage)Zeig mal Deinen Code, der nicht funktioniert hat.
-
Hallo,
hab jetzt in der Zwischenzeit mir folgendes ausgetüfftelt, um mir eine Strukturansicht aus der geordeneten Liste zu erzeugen:
CTreeCtrl *pTreeCtrl1=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl2=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl3=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl4=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl5=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl6=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); if(listKopf){ listPtr=listKopf; do{ //darstell.MessageBox(listPtr->gesamtEintrag); if(listPtr->tesKennz >0){ if(listPtr->bueUnterKennz>0){ if(listPtr->buchKennz>0){ if(listPtr->kapKennz>0){ if(listPtr->bueUnterKennz>0){ if(listPtr->versKennz>0){ for(int i=1; i<=listPtr->kennza[5];i++){ CString str; str.Format( "Vers [%02d]", i ); pTreeCtrl5->InsertItem(str, pTreeCtrl6->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } } pTreeCtrl4->InsertItem(listPtr->gesamtEintrag, pTreeCtrl5->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); listPtr=listPtr->weiter; } pTreeCtrl4->InsertItem(listPtr->gesamtEintrag, pTreeCtrl3->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); listPtr=listPtr->weiter; } pTreeCtrl3->InsertItem(listPtr->gesamtEintrag, pTreeCtrl2->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); listPtr=listPtr->weiter; } pTreeCtrl2->InsertItem(listPtr->gesamtEintrag, pTreeCtrl1->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); listPtr=listPtr->weiter; } pTreeCtrl1->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem); listPtr=listPtr->weiter; } else darstell.MessageBox("Nomenklaturbeginn mit 0"); }while(listPtr); } else darstell.MessageBox("Keine Liste"); }Das funktioniert aber irgendwie nicht, obwohl ich keine Fehlermeldung bekomme, ist mein Programm so nicht ausführbar.Hat jemand eine Idee, woran es liegen kann?
-
schoene fehlermeldung #gg
versucht mal mit nem breakpoint direkt zu beginn von den geposteten code, und hangel dich mit F10 bis zum fehler vor
-
Hallo,
danke für den Tipp. Lag an listPtr=listPtr->weiter; nach der dritten if wurde das wohl irgendwie zu viel. Hab den Code jetzt etwas geändert und es läuft jetzt schon mal soweit. Nur mit den Einträgen funktioniert das noch nicht so, wie ich das gerne hätte. Da für jeden Untereintrag jedesmal der zugehörige übergeordnete Eintrag in die Strukturansicht geschrieben wird und dieser immer hinter die Wurzel gesetzt wird.
Hat jemand eine Idee, was an meinem Code falsch sein könnte? Benutze ich vielleicht die Zeiger falsch?CTreeCtrl *pTreeCtrl1=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl2=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl3=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl4=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl5=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); CTreeCtrl *pTreeCtrl6=(CTreeCtrl *)GetDlgItem(IDC_TREE_BibelInhaltsverzeichnis3); if(listKopf){ listPtr=listKopf; do{ //darstell.MessageBox(listPtr->gesamtEintrag); if(listPtr->tesKennz >0){ if(listPtr->bueUnterKennz>0){ if(listPtr->buchKennz>0){ if(listPtr->kapKennz>0){ if(listPtr->bueUnterKennz>0){ if(listPtr->versKennz>0){ for(int i=1; i<=listPtr->kennza[5];i++){ CString str; str.Format( "Vers [%02d]", i ); pTreeCtrl5->InsertItem(str, pTreeCtrl6->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } } pTreeCtrl4->InsertItem(listPtr->gesamtEintrag, pTreeCtrl5->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } pTreeCtrl4->InsertItem(listPtr->gesamtEintrag, pTreeCtrl3->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } pTreeCtrl3->InsertItem(listPtr->gesamtEintrag, pTreeCtrl2->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } pTreeCtrl2->InsertItem(listPtr->gesamtEintrag, pTreeCtrl1->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem)); } pTreeCtrl1->InsertItem(listPtr->gesamtEintrag, tvinsert.item.hItem); } else darstell.MessageBox("Nomenklaturbeginn mit 0"); listPtr=listPtr->weiter; }while(listPtr); } else darstell.MessageBox("Keine Liste"); }