遍历CTreeView的item时非法操作

fenex 2002-01-14 04:37:32
以下是代码:
CTreeCtrl &TreeCtrl = 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 ++;
}
以上代码修改自MSDN。请问各位大侠,应该怎么修改啊?
...全文
97 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenex 2002-01-15
  • 打赏
  • 举报
回复
据我所知GetDlgItem(IDC_TREE1)返回的是对象地址,但是在CTreeView中GetTreeCtrl();返回的是对象的引用。关于这个你可以查阅MSDN中的CTreeView的GetTreeCtrl()部分。
该函数原型是CTreeCtrl& GetTreeCtrl( ) const;
tpProgramer 2002-01-15
  • 打赏
  • 举报
回复

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 ++;
}
tpProgramer 2002-01-15
  • 打赏
  • 举报
回复

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 ++;
}
tpProgramer 2002-01-15
  • 打赏
  • 举报
回复

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 ++;
}
fenex 2002-01-15
  • 打赏
  • 举报
回复
没人知道吗?
fenex 2002-01-14
  • 打赏
  • 举报
回复
tpProgramer(tp编程者):
你说的不对。GetTreeCtrl();返回的是一个引用,而不是指针。
tpProgramer 2002-01-14
  • 打赏
  • 举报
回复
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,658

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧