当父节点收缩,而再次展开时,上次所有已经展开的子节点状态如何保存?
    另外,我现在需要提高节点展开效率,因为文件夹比较多,所以不知道如果不更新tree的内容,只是再次打开,是否不需要像第一次一样,InsertItem.而直接用Expand( HTREEITEM hItem, UINT nCode ) 
    请各位指教。

解决方案 »

  1.   

    CWordArray waArticleOpened; //已经打开的Article的ID号集合
    while (NULL!=hti)
    {
    if (pTree->GetItemState(hti,TVIS_EXPANDED))
    {
    CItemInfo *pii = (CItemInfo *)(pTree->GetItemData(hti));
    waArticleOpened.Add(pii->GetArticle()->GetIndex());//我这里存储的是索引号,你可以存储ItemInfo。
    }
    hti = pTree->GetNextSiblingItem(hti);//获得下一个同级的Item
    }//此段代码用于纪录当前打开的TreeView项,以便在DeltetAllItems后返回到原状态
    ==========================
    恢复展开:
    hti = pTree->GetChildItem(TVI_ROOT);
    while (NULL!=hti)
    {
    if (0==waArticleOpened.GetSize()) break; CItemInfo *pii = (CItemInfo *)(pTree->GetItemData(hti));
    pAtc = pii->GetArticle();
    for (i=0; i<waArticleOpened.GetSize(); i++)
    {
    if (pAtc->GetIndex() == waArticleOpened[i])
    {
    pTree->Expand(hti, TVE_EXPAND);
    waArticleOpened.RemoveAt(i);
    break;
    }
    }
    hti = pTree->GetNextSiblingItem(hti);
    }
      

  2.   

    第二个问题:我认为还是需要再次打开并逐个Insert,效率应该没有什么大的问题,我以前做过5万节点的Tree,感觉效率还是不错的,大约2秒多就加载完毕了。
      

  3.   

    主要是我的节点前面时带图标的,而且如果每次用InsertItem的时候,要有一系列判断,确定前面的图标应该用哪个,所以效率比较低,因此,希望在不需要更新的时候,有没有办法直接展开,保持原来的图标不变?