Are you sure the following  is right?!       CTreeCtrl &TreeCtrl = GetTreeCtrl();Maybe you should use point!CTreeCtrl pTreeCtrl = GetTreeCtrl();
int nCount = 0;
HTREEITEM hCurrent = TreeCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);//非法操作
while (hCurrent != NULL)
{        TVITEM item;
        TCHAR szText[1024];
        item->hItem = hCurrent;
        item->mask = TVIF_TEXT | TVIF_HANDLE;
        item->pszText = szText;
        item->cchTextMax = 1024;        BOOL bWorked = TreeCtrl->GetItem(&item);        // Try to get the next item
        hCurrent = TreeCtrl->GetNextItem(hCurrent, TVGN_NEXT);        if (bWorked)
            nCount ++;
}       

解决方案 »

  1.   

    tpProgramer(tp编程者):
       你说的不对。GetTreeCtrl();返回的是一个引用,而不是指针。
      

  2.   


    the point and the reference:
     
     int i =5;
     int *p = &i;  // pointer p point the address of an Integer variant;
     
    so, you should use point to a address of a variant!! CTreeCtrl* pTreeCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
    ASSERT(pTreeCtrl != NULL);int nCount = 0;
    HTREEITEM hCurrent = pTreeCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);//非法操作
    while (hCurrent != NULL)
    {        TVITEM item;
            TCHAR szText[1024];
            item->hItem = hCurrent;
            item->mask = TVIF_TEXT ¦ TVIF_HANDLE;
            item->pszText = szText;
            item->cchTextMax = 1024;        BOOL bWorked = pTreeCtrl->GetItem(&item);        // Try to get the next item
            hCurrent = pTreeCtrl->GetNextItem(hCurrent, TVGN_NEXT);        if (bWorked)
                nCount ++;
    }
      

  3.   


    the point and the reference:
     
     int i =5;
     int *p = &i;  // pointer p point the address of an Integer variant;
     
    so, you should use point to a address of a variant!! CTreeCtrl* pTreeCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
    ASSERT(pTreeCtrl != NULL);int nCount = 0;
    HTREEITEM hCurrent = pTreeCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);//非法操作
    while (hCurrent != NULL)
    {        TVITEM item;
            TCHAR szText[1024];
            item->hItem = hCurrent;
            item->mask = TVIF_TEXT ¦ TVIF_HANDLE;
            item->pszText = szText;
            item->cchTextMax = 1024;        BOOL bWorked = pTreeCtrl->GetItem(&item);        // Try to get the next item
            hCurrent = pTreeCtrl->GetNextItem(hCurrent, TVGN_NEXT);        if (bWorked)
                nCount ++;
    }
      

  4.   


    the point and the reference:
     
     int i =5;
     int *p = &i;  // pointer p point the address of an Integer variant;
     
    so, you should use point to a address of a variant!! CTreeCtrl* pTreeCtrl = (CTreeCtrl*) GetDlgItem(IDC_TREE1);
    ASSERT(pTreeCtrl != NULL);int nCount = 0;
    HTREEITEM hCurrent = pTreeCtrl->GetNextItem(TVI_ROOT, TVGN_NEXT);//非法操作
    while (hCurrent != NULL)
    {        TVITEM item;
            TCHAR szText[1024];
            item->hItem = hCurrent;
            item->mask = TVIF_TEXT ¦ TVIF_HANDLE;
            item->pszText = szText;
            item->cchTextMax = 1024;        BOOL bWorked = pTreeCtrl->GetItem(&item);        // Try to get the next item
            hCurrent = pTreeCtrl->GetNextItem(hCurrent, TVGN_NEXT);        if (bWorked)
                nCount ++;
    }
      

  5.   

    据我所知GetDlgItem(IDC_TREE1)返回的是对象地址,但是在CTreeView中GetTreeCtrl();返回的是对象的引用。关于这个你可以查阅MSDN中的CTreeView的GetTreeCtrl()部分。
    该函数原型是CTreeCtrl& GetTreeCtrl( ) const;