这段递归展开树的程序有什么问题吗?
当多子项目多的时候,就死机. HTREEITEM hSubItem ;
if(hItem != NULL)
{
//CString sItem = this->GetItemText(hItem);
TRACE("expand %s \n", sItem);
Expand(hItem,TVE_EXPAND );
hSubItem = GetChildItem(hItem);
}
else
{
return;
}
if(hSubItem!=NULL)
{
expandAllItem(hSubItem);
}

HTREEITEM hSiblingItem = GetNextSiblingItem(hItem); 
while((hSiblingItem != NULL)&& (bWithFirstLevel))
{
expandAllItem(hSiblingItem);
hSiblingItem = GetNextSiblingItem(hSiblingItem); 
}

解决方案 »

  1.   

    输入不全,重发
    void CMYTreeCtrl::expandAllItem(HTREEITEM hItem,BOOL bWithFirstLevel)
    { HTREEITEM hSubItem ;
    if(hItem != NULL)
    {
    CString sItem = this->GetItemText(hItem);
    TRACE("expand %s \n", sItem);
    Expand(hItem,TVE_EXPAND );
    hSubItem = GetChildItem(hItem);
    }
    else
    {
    return;
    }
    if(hSubItem!=NULL)
    {
    expandAllItem(hSubItem);
    }

    HTREEITEM hSiblingItem = GetNextSiblingItem(hItem); 
    while((hSiblingItem != NULL)&& (bWithFirstLevel))
    {
    expandAllItem(hSiblingItem);
    hSiblingItem = GetNextSiblingItem(hSiblingItem); 
    }}
      

  2.   

    expandAllItem(HTREEITEM hItem,BOOL bWithFirstLevel)
    你在用这个函数时,只有一个参数,为什么定义时写两个参数呢?理论上没有什么问题了.