TreeView_GetParent + Child liefert immer NULL



  • item.cchTextMax = 99;
    		item.cChildren = 1;
    
    		tvi.hInsertAfter = TVI_LAST;
    
    		tvi.hParent = NULL;
    		item.pszText = "Test";
    		item.mask = TVIF_TEXT | TVIF_CHILDREN;
    		tvi.item = item;
    		root = TreeView_InsertItem (tree, &tvi);
    
    		tvi.hParent = root;
    		item.pszText = "Test2";
    		tvi.item = item;
    		hit = TreeView_InsertItem (tree, &tvi);
    
    		tvi.hParent = hit;
    		item.pszText = "Test3";
    		item.mask = TVIF_TEXT;
    		tvi.item = item;
    		hit = TreeView_InsertItem (tree, &tvi);
    
    NM_TREEVIEW *nm_tree;
    		nm_tree = (NM_TREEVIEW *) lParam;
    
    		switch (nm_tree->hdr.code) 
    		{		
    		case TVN_SELCHANGED:
    			nm_tree->itemNew.mask |= TVIF_TEXT;
    			nm_tree->itemNew.pszText = root_text;
    			HTREEITEM test = TreeView_GetParent (nm_tree->hdr.hwndFrom, &nm_tree->itemNew);
    			HTREEITEM test2 = TreeView_GetChild (nm_tree->hdr.hwndFrom, &nm_tree->itemNew);
    		}
    		return 0;
    

    So, egal welches Item ich auswähle von den dreien, immer wird von den beiden Funktionen NULL zurückgeliefert. Das hier ist nur zum Testen und hätte eine Alternativlösung geboten, ansonsten habe ich 3 Roots mit jeweils mehreren Childs, aber ich komme einfach nicht an die Strings der Roots ran. Hat jemand eine Idee warum die 2 Funktionen nicht funktionieren oder wie ich ansonsten an die Strings der übergeordneten Items (Roots) komme?



  • Grad keine zeit, aber vllt hilft dir: http://www.codeproject.com/KB/tree/treeview.aspx?msg=1359684



  • Das ist leider nicht hilfreich. Trotzdem danke.





  • Du solltest bei den Makros auch die HTREEITEMs angeben und nicht die Zeiger auf die TVITEM-Struktur:

    HTREEITEM test = TreeView_GetParent (nm_tree->hdr.hwndFrom, nm_tree->itemNew.hItem);
    HTREEITEM test2 = TreeView_GetChild (nm_tree->hdr.hwndFrom, nm_tree->itemNew.hItem);
    


  • @ sri: Naja das Problem ist, dass ich die Strings von den Items brauche und ich habe bereits woanders gelesen, dass es so eigentlich funktionieren sollte. Oder gibt es noch eine Möglichkeit aus den HTREEITEM's die Texte zu holen? Bin mir eigentlich sicher, dass das nicht geht.

    @ C++-ler: Danke ich werde mal reinschauen.



  • Okay folgender Satz war sehr hilfreich:

    Sie sehen, dass Sie das Handle des Tree View Items, an dem Sie Interesse haben, mit dieser Nachricht ermitteln können. SendMessage liefert bei Erfolg das Handle des Tree View Items zurück. Sie können das zurückgegebene Handle im hItem Element von TV_ITEM speichern, um es mit der TVM_GETITEM Nachricht zu benutzen.

    Und auch Danke sri. Hattest doch Recht. 😉

    So gehts:

    HTREEITEM item = TreeView_GetSelection (nm_tree->hdr.hwndFrom);
    			HTREEITEM item2 = TreeView_GetParent (nm_tree->hdr.hwndFrom, item);
    
    			TVITEM tv = {0};
    
    			tv.mask = TVIF_TEXT | TVIF_HANDLE;
    			tv.hItem = item2;
    			tv.pszText = root_text;
    			tv.cchTextMax = 99;
    
    			TreeView_GetItem (nm_tree->hdr.hwndFrom, &tv);
    

Anmelden zum Antworten