MFC - Tree-Problem - Wie bekomme ich Daten in Baum eines aufzurufenden Dialoges?
-
Hallo bin Anfänger mit MFC und habe folgendes Problem:
Ich habe einen Dialog IDD_TreeDialog aufgebaut, bei dem Links ein Baum dargestellt werden soll und rechts eine Liste. Dem Baum habe ich eine Variable CTreeCtrl m_TestTree zugeordnet. Aus meiner View-Funktion habe ich eine Instanz mit TREEDIALOG_VERZEICHNIS_BOX m_dVerzeichnisTree; erzeugt und rufe diese in meiner View auf Knopfdruck den Dialog auf mit if (m_dVerzeichnisTree.DoModal () == OK {}
Leider bekomme ich in den Baum keine Daten rein.
Ich habe es in dieser Aufruffunktion versucht mit:HTREEITEM htree;
htree=m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",0,0,TVI_ROOT,TVI_LAST);
m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("wad",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("wds",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("Tsdfveste",htree);Aber der Baum bleibt einfach leer.
Es kommt aber keine Fehlermeldung.
Wie bekomme ich in diesen Baum Daten rein???Vielen Dank schon im Vorraus für Eure Hilfe.
-
Mit welchem Style ist das Feld IDD_TreeDialog eingestellt?
-
Geh mal in die Eigenschaften des IDD_TreeDialog Elements und auf die Formate. Hier aktiviere "Besitzt Schaltflächen", "Besitzt Linien", "Linien am Stamm".
Da er ja leer bleibt, wird das Insert nicht korrekt ausgeführt.Hast du nach dem öffnen des Dialogs auf einen Zeiger auf das IDD_TreeDialog Objekt geholt?
-
Ich rufe folgende Funktion auf, um den Dialog darzustellen.
Die Styles des Baums sind so eingestellt, wie Du es vorher gesagt hast.
Hat aber nichts gebracht.void CHtaccessView::OnAnsichtVerzeichnisansicht()
{/* TODO: Add your command handler code here*/
if (m_dVerzeichnisTree.DoModal () )
{
HTREEITEM htree;
htree=m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",0,0,TVI_ROOT,TVI_LAST);
m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("wad",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("wds",htree);
m_dVerzeichnisTree.m_TestTree.InsertItem("Tsdfveste",htree);
}}
-
Zum Hinzufügen von Items kann man TVINSERTSTRUCT verwenden. Beispiel:
HTREEITEM hTest = GetRootItem(); while (hTest&&GetItemType(hTest)!=TEST) hTest = GetNextItem(hTest, TVGN_NEXT); if (!hTest) { // Testknoten erstellen TVINSERTSTRUCT tvInsert; tvInsert.hInsertAfter = TVI_LAST; tvInsert.hParent = TVI_ROOT; tvInsert.item.mask = TVIF_PARAM; tvInsert.item.lParam = THERAPY; hTest = InsertItem(&tvInsert); }
// EDIT:
Dieser Kode ist aus einer eigenen von TreeCtrl abgeleiteten Klasse, da die Standardfkt. von TreeCtrl IMHO sehr unbequem sind. Deswegen muss man ausserhalb von TreeCtrl schreiben:hTest = myTree.InsertItem(&tvInsert);
// EDIT2:
Dann musst du nach dem Hinzufügen den TreeCtrl neu zeuchen. Die einfachste Möglichkeit:myTree.Invalidate();
-
ThomasMichels schrieb:
Ich rufe folgende Funktion auf, um den Dialog darzustellen.
Die Styles des Baums sind so eingestellt, wie Du es vorher gesagt hast.
Hat aber nichts gebracht.void CHtaccessView::OnAnsichtVerzeichnisansicht() { /* TODO: Add your command handler code here*/ if (m_dVerzeichnisTree.DoModal () ) { HTREEITEM htree; htree=m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",0,0,TVI_ROOT,TVI_LAST); m_dVerzeichnisTree.m_TestTree.InsertItem("Teste",htree); m_dVerzeichnisTree.m_TestTree.InsertItem("wad",htree); m_dVerzeichnisTree.m_TestTree.InsertItem("wds",htree); m_dVerzeichnisTree.m_TestTree.InsertItem("Tsdfveste",htree); }
}
Ist ja eigentlich klar das du nichts dargestellt bekommst.
Du rufst ja erst den Dialog auf und fügst dann die Werte hinzu.
Bei der Funktion DoModal bleibt er stehen bis IDOK oder IDCANCEL gesendet wird und so der Dialog wieder geschlossen ist.
Du musst die Daten vor dem DoModal aufruf hinzufügen!
-
HI,
aber auch wenn ich das ganze vor das domodal setze, bleibt mein Baum einfach leer.
Ich habe es auch schon versucht, den Baum im Konstruktor des Dialoges aufzubauen, aber auch hier immer ein leerer Baum.Ich habe keine Ahnung, woran es liegen könnte.
Alle Beschreibungen schlagen bei mir fehl.
-
Schreib den Code mal in den Dialog und führe den Code beim start des Dialoges aus.