无法显示treeview根节点项文本mfc?

无法显示treeview根节点项文本mfc?,mfc,Mfc,我有一个树控件,我用两个节点启动了树控件,其中两个项由子节点组成。我在对话框中添加了一个按钮,现在当我单击任何根节点并单击此按钮时,我必须复制现有节点,即复制现有节点 我可以复制它并显示重复的数据。这里正好出现了我的问题,即我无法看到复制的根节点文本,但我可以看到子节点,唯一的问题是根节点无法显示文本 void AddCopy { int model_count = 2; WCHAR szSelectedItemText[MAX_PATH] = {0}; WCHA

我有一个树控件,我用两个节点启动了树控件,其中两个项由子节点组成。我在对话框中添加了一个按钮,现在当我单击任何根节点并单击此按钮时,我必须复制现有节点,即复制现有节点

我可以复制它并显示重复的数据。这里正好出现了我的问题,即我无法看到复制的根节点文本,但我可以看到子节点,唯一的问题是根节点无法显示文本

void AddCopy
{


    int model_count = 2;

    WCHAR szSelectedItemText[MAX_PATH] = {0};

    WCHAR szChildItem[MAX_PATH] = {0};

    WCHAR *szDuplicateItem;
    HTREEITEM hFirstChild;
    HTREEITEM hFirstChildTemp ;
    HTREEITEM hParentSelect;
    HTREEITEM hFirstSubChild ;
    HTREEITEM hShareTempItem;
    HTREEITEM hShareTemp;
    HTREEITEM hChildParent;
    HTREEITEM hPsChildItem ;
    HTREEITEM hTreeNextItem;

    hSelectedItem = m_TreeCtrl.GetNextItem((HTREEITEM)(m_TreeCtrl.GetSafeHwnd()),TVGN_CARET);


    m_TreeCtrl.GetNextItem(hSelectedItem,TVGN_CARET);
    if(hSelectedItem == NULL)
    {
        ::MessageBox(NULL,L"No Item is hSelectedItem",L"Test",MB_OK|MB_ICONEXCLAMATION);

    }

    m_TreeCtrl.EnsureVisible(hSelectedItem);

    ::SendDlgItemMessage(m_TreeCtrl.GetSafeHwnd(),IDC_TREE,TVM_SELECTITEM,0,(LPARAM)hSelectedItem);
    tvItem.mask = TVIF_TEXT;
    tvItem.pszText = szSelectedItemText;
    tvItem.cchTextMax = MAX_PATH;
    tvItem.hItem = hSelectedItem;
    tvItem.cChildren = 1;


    m_TreeCtrl.GetItem(&tvItem);
    szDuplicateItem = szSelectedItemText;

    if(::wcsstr(szSelectedItemText,L"(")||::wcsstr(szSelectedItemText,L")"))
    {
        ::MessageBox(NULL,L"Cannot Add Device On Replicated Model \n Please Choose An Appropriate Model",L"Test",MB_OK|MB_ICONERROR);

    } 
    else 
    {




        if(szSelectedItemText !=L"")
        {
            int count =0 ;

            WCHAR szNextVisible[256]={0};


            hTreeNextItem = m_TreeCtrl.GetNextSiblingItem(hSelectedItem);
            while(hTreeNextItem!= NULL)
            {
                tvChildItem.mask = TVIF_TEXT;//TVITEM tvChildItem;
                tvChildItem.pszText = szNextVisible;
                tvChildItem.cchTextMax = MAX_PATH;
                tvChildItem.hItem = hTreeNextItem;
                m_TreeCtrl.GetItem(&tvChildItem);
                m_TreeCtrl.GetNextVisibleItem(hTreeNextItem);

                HTREEITEM hSibiling = TreeView_GetNextSibling(m_TreeCtrl.GetSafeHwnd(),hTreeNextItem);


                if(::wcsstr(szNextVisible,szSelectedItemText))
                {
                    if(::wcsstr(szNextVisible,L"("))
                    {
                        count++;
                    }
                }

                hTreeNextItem = hSibiling;
            }

            model_count = model_count + count;

        }

        WCHAR szTextSelectedItem[MAX_PATH]= {0};

        hParentSelect = TreeView_GetParent(m_hTreeWnd,hSelectedItem);
        HTREEITEM hDummy = m_TreeCtrl.GetParentItem(hSelectedItem);
        tvInsert.hParent = hParentSelect;//TVINSERTSTRUCT tvInsert;
        tvInsert.hInsertAfter = TVI_LAST;
        tvInsert.item.pszText = szSelectedItemText;
        tvInsert.item.hItem = hSelectedItem;


        if((!(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))&&
            !(::wcsstr(szDuplicateItem,L"XXX"))))
        {

            hParentItem = m_TreeCtrl.InsertItem(&tvInsert);
            hFirstChild = m_TreeCtrl.GetChildItem(hSelectedItem);
            hFirstChildTemp = hFirstChild;
            while (hFirstChild != NULL)
            { 

                tvChildItem.mask = TVIF_TEXT;
                tvChildItem.pszText = szChildItem;
                tvChildItem.cchTextMax = MAX_PATH;
                tvChildItem.hItem = hFirstChild;
                tvChildItem.cChildren = 1;
                m_TreeCtrl.GetItem(&tvChildItem);

                if(hFirstChild == hSubChild)
                {
                    tvInsert.hParent = hShareItemParent;
                } else  {

                    tvInsert.hParent = hParentItem;
                }
                tvInsert.hInsertAfter = TVI_LAST;
                tvInsert.item.mask = TVIF_TEXT;
                tvInsert.item.pszText = szChildItem;
                tvInsert.item.hItem = hFirstChild;


                if(::wcsstr(szChildItem,L"XXX")||
                    ::wcsstr(szChildItem,L"XXX")||
                    ::wcsstr(szChildItem,L"XXX"))
                {
                    hShareItemParent = m_TreeCtrl.InsertItem(&tvInsert);

                    hFirstSubChild = m_TreeCtrl.GetChildItem(hFirstChild);
                    hShareTemp = hFirstSubChild;
                    hChildParent = m_TreeCtrl.GetParentItem(hFirstChild);
                    while(hFirstSubChild != NULL)
                    {
                        tvChildItem.mask = TVIF_TEXT;
                        tvChildItem.pszText = szChildItem;
                        tvChildItem.cchTextMax = MAX_PATH;
                        tvChildItem.hItem =hFirstSubChild;
                        tvChildItem.cChildren = 1;
                        m_TreeCtrl.GetItem(&tvChildItem);
                        if(hFirstSubChild == hShareChildItem)
                        {
                            tvInsert.hParent = hShareTempItem;
                        } 
                        else  
                        {

                            tvInsert.hParent = hShareItemParent;
                        }

                        tvInsert.hInsertAfter = TVI_LAST;
                        tvInsert.item.pszText = szChildItem;
                        tvInsert.item.hItem = hFirstSubChild;
                        hShareTempItem = m_TreeCtrl.InsertItem(&tvInsert);

                        if(0 == ::wcscmp(szChildItem,L"YYY"))
                        {

                            hShareChildItem = m_TreeCtrl.GetChildItem(hFirstSubChild);
                            hFirstSubChild = hShareChildItem;
                        }  
                        else
                        {
                            if(hShareChildItem == hFirstSubChild)
                            {
                                hFirstSubChild = hShareTemp;
                            }
                            hNextSibilingItem = m_TreeCtrl.GetNextSiblingItem(hFirstSubChild);
                            hFirstSubChild = hNextSibilingItem;

                        }

                    }

                }
                hPsChildItem = m_TreeCtrl.GetNextSiblingItem(hFirstChild);
                hFirstChild = hPsChildItem; 

            }

            ::UpdateWindow(m_TreeCtrl.GetSafeHwnd());

        }

    }


}
这就是我添加副本的方式。例如,在我的树中,第一个节点是XXX,现在我单击“添加”按钮,树控件将获得另一个项目,如XXX2,依此类推。。像这样

在我的场景中,当我第一次添加时,我得到的是空的东西作为节点,并且能够得到子节点。现在,如果我现在单击添加,我得到的是XXX2,然后再次添加XXX3

我不知道为什么调试时无法获取文本,因为它显示文本,但未设置文本


任何人都可以告诉我哪里做错了。

尝试将szDuplicateItem从指针更改为WCHAR数组WCHAR szDuplicateItem[_MAX_PATH];并从szSelectedItemText复制值。已更改,但仍不起作用。它就是这样来的。