※ pDib라는 포인터로 Item을 검사합니다.
//HTREEITEM 구조체를 두개 선언합니다.
HTREEITEM ParentItem, ChildItem;
//Root노드에서 자식노드를 얻는다.
ParentItem= m_wndClassView.GetNextItem(m_wndClassView.GetRootItem(), TVGN_CHILD);
ChildItem= m_wndClassView.GetNextItem(ParentItem, TVGN_CHILD);//Child item을 얻는다
while ( ParentItem!= NULL )//Root하위 노드의 item체크
{
while ( item != NULL )//현재 개층의 item체크
{
DWORD_PTR ptr = NULL;
ptr = m_wndClassView.GetItemData(ChildItem);
str = m_wndClassView.GetItemText(ChildItem);
if (ptr == (DWORD_PTR)pDib)//찾았다.
{
m_wndClassView.Select( ChildItem, TVGN_CARET | TVGN_FIRSTVISIBLE | TVGN_DROPHILITE);
m_wndClassView.SelectItem(ChildItem);
m_wndClassView.SelectDropTarget(ChildItem);
return TRUE;
}//if
item = m_wndClassView.GetNextItem(ChildItem, TVGN_NEXT);//다음 Wall Item
}
ParentItem= m_wndClassView.GetNextItem(ParentItem, TVGN_NEXT);//다음 Walls Item
ChildItem= m_wndClassView.GetNextItem(ParentItem, TVGN_CHILD);//Walls의 첫 자식item을 얻는다
}
return FALSE;//해당 포인터를 가지는 item이 없다.
주의할점은 계층이 깊어질 수록 while()의 깊이도 늘어나는 겁니다.
한방에 순회할수 있는 방법은 아직 모르겠네요~^^; 아시는분은 댓글로 좀 알려주세요;;
void CClassView::ReefNodeTrever(HTREEITEM parect, CString text)
{
CString str;
HTREEITEM item=NULL;
HTREEITEM child=NULL;
if ( parect == NULL)//최상위 노드일 경우
{
item = m_wndClassView.GetRootItem();
NodeTrever(item, text);
return ;
}
//현재 레밸를 검사한다.
item = parect;
while ( item != NULL)//형
{
//자식노드가 있으면 재귀 호출
child = m_wndClassView.GetChildItem(item);
if ( child != NULL)
{
ReefNodeTrever(child, text);
}
else//없으면 현재 노드 검사
{
str = m_wndClassView.GetItemText(item);
if ( !str.Compare( text))
{
MessageBox(TEXT("찾았다!!"), TEXT("TreeCtrl Traver Msg"));
return ;
}
}
item = m_wndClassView.GetNextItem(item, TVGN_NEXT);
}
}
void CClassView::NodeTrever(HTREEITEM parect, CString text)
{
CString str;
HTREEITEM item=NULL;
HTREEITEM child=NULL;
if ( parect == NULL)//최상위 노드일 경우
{
item = m_wndClassView.GetRootItem();
NodeTrever(item, text);
return ;
}
//현재 레밸를 검사한다.
item = parect;
while ( item != NULL)//형
{
//현재 노드 검사
str = m_wndClassView.GetItemText(item);
if ( !str.Compare( text))
{
MessageBox(TEXT("찾았다!!"), TEXT("TreeCtrl Traver Msg"));
return ;
}
//자식노드가 있으면 재귀 호출
child = m_wndClassView.GetChildItem(item);
if ( child != NULL)
{
NodeTrever(child, text);
}
item = m_wndClassView.GetNextItem(item, TVGN_NEXT);
}
}