// <bro-2002-04-10> 트리 아이뎀 올렸다 내렸다 하는 코드
//=================================================================
// 함수명 : gfnTreeCopyItem
// 설 명 : 트리에서 하나의 아이템을 복사한다.
// 인 자 : ctrlTree - 해당 트리 컨트롤
// hItem - 복사할 아이템
// htiNewParent - 복사시킬 곳의 부모 아이템
// htiAfter - 복사시킬 곳의 위치
// 리턴값 : 복사된 새로운 가지 아이템
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
HTREEITEM gfnTreeCopyItem( CTreeCtrl& ctrlTree, HTREEITEM hItem, HTREEITEM htiNewParent,
HTREEITEM htiAfter = TVI_LAST )
{
TV_INSERTSTRUCT tvstruct;
HTREEITEM hNewItem;
CString sText;
// get information of the source item
tvstruct.item.hItem = hItem;
tvstruct.item.mask = TVIF_CHILDREN | TVIF_HANDLE |
TVIF_IMAGE | TVIF_SELECTEDIMAGE;
ctrlTree.GetItem(&tvstruct.item);
sText = ctrlTree.GetItemText( hItem );
tvstruct.item.cchTextMax = sText.GetLength();
tvstruct.item.pszText = sText.LockBuffer();
// Insert the item at proper location
tvstruct.hParent = htiNewParent;
tvstruct.hInsertAfter = htiAfter;
tvstruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
hNewItem = ctrlTree.InsertItem(&tvstruct);
sText.ReleaseBuffer();
// Now copy item data and item state.
ctrlTree.SetItemData( hNewItem, ctrlTree.GetItemData( hItem ));
ctrlTree.SetItemState( hNewItem, ctrlTree.GetItemState( hItem, TVIS_STATEIMAGEMASK ),
TVIS_STATEIMAGEMASK );
return hNewItem;
}
//=================================================================
// 함수명 : gfnTreeCopyBranch
// 설 명 : 트리에서 하나의 가지를 복사한다.
// 인 자 : ctrlTree - 해당 트리 컨트롤
// htiBranch - 복사할 가지
// htiNewParent - 복사시킬 곳의 부모 아이템
// htiAfter - 복사시킬 곳의 위치
// 리턴값 : 복사된 새로운 가지 아이템
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
HTREEITEM gfnTreeCopyBranch( CTreeCtrl& ctrlTree, HTREEITEM htiBranch, HTREEITEM htiNewParent,
HTREEITEM htiAfter = TVI_LAST )
{
HTREEITEM hChild;
// 일딴 자기 아이템을 복사한다.
HTREEITEM hNewItem = gfnTreeCopyItem( ctrlTree, htiBranch, htiNewParent, htiAfter );
hChild = ctrlTree.GetChildItem(htiBranch);
while( hChild != NULL)
{
// 가지 복사를 계속한다.
gfnTreeCopyBranch(ctrlTree, hChild, hNewItem);
hChild = ctrlTree.GetNextSiblingItem( hChild );
}
return hNewItem;
}
//=================================================================
// 함수명 : gfnSwapTreeItem
// 설 명 : 해당 트리에서 두 아이템을 스왑하는 함수
// 더 확장하면 두 트리 컨트롤에서의 아이템(가지)의 스왑도 가능
// 인 자 : ctrlTree - 해당 트리 컨트롤
// [in,out] phItem1 - 스왑하고자 하는 아이템1, 스왑후
// 새로 생성된 아이템을 가리킨다.
// [in,out] phItem2 - 스왑하고자 하는 아이템2, 스왑후
// 새로 생성된 아이템을 가리킨다.
// 리턴값 :
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
void gfnSwapTreeItem( CTreeCtrl& ctrlTree, HTREEITEM* phItem1, HTREEITEM* phItem2 )
{
HTREEITEM hItem1 = *phItem1;
HTREEITEM hItem2 = *phItem2;
// 각 브렌치를 복사한다.
HTREEITEM hParent1 = ctrlTree.GetParentItem( hItem1 );
*phItem1 = gfnTreeCopyBranch( ctrlTree, hItem2, hParent1, hItem1 );
// 각 브렌치를 복사한다.
HTREEITEM hParent2 = ctrlTree.GetParentItem( hItem2 );
*phItem2 = gfnTreeCopyBranch( ctrlTree, hItem1, hParent2, hItem2 );
// 기존의 브렌치는 삭제해 버린다.
ctrlTree.DeleteItem( hItem1 );
ctrlTree.DeleteItem( hItem2 );
}
// </bro-2002-04-10> 트리 아이뎀 올렸다 내렸다 하는 코드
//=================================================================
// 함수명 : gfnTreeCopyItem
// 설 명 : 트리에서 하나의 아이템을 복사한다.
// 인 자 : ctrlTree - 해당 트리 컨트롤
// hItem - 복사할 아이템
// htiNewParent - 복사시킬 곳의 부모 아이템
// htiAfter - 복사시킬 곳의 위치
// 리턴값 : 복사된 새로운 가지 아이템
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
HTREEITEM gfnTreeCopyItem( CTreeCtrl& ctrlTree, HTREEITEM hItem, HTREEITEM htiNewParent,
HTREEITEM htiAfter = TVI_LAST )
{
TV_INSERTSTRUCT tvstruct;
HTREEITEM hNewItem;
CString sText;
// get information of the source item
tvstruct.item.hItem = hItem;
tvstruct.item.mask = TVIF_CHILDREN | TVIF_HANDLE |
TVIF_IMAGE | TVIF_SELECTEDIMAGE;
ctrlTree.GetItem(&tvstruct.item);
sText = ctrlTree.GetItemText( hItem );
tvstruct.item.cchTextMax = sText.GetLength();
tvstruct.item.pszText = sText.LockBuffer();
// Insert the item at proper location
tvstruct.hParent = htiNewParent;
tvstruct.hInsertAfter = htiAfter;
tvstruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
hNewItem = ctrlTree.InsertItem(&tvstruct);
sText.ReleaseBuffer();
// Now copy item data and item state.
ctrlTree.SetItemData( hNewItem, ctrlTree.GetItemData( hItem ));
ctrlTree.SetItemState( hNewItem, ctrlTree.GetItemState( hItem, TVIS_STATEIMAGEMASK ),
TVIS_STATEIMAGEMASK );
return hNewItem;
}
//=================================================================
// 함수명 : gfnTreeCopyBranch
// 설 명 : 트리에서 하나의 가지를 복사한다.
// 인 자 : ctrlTree - 해당 트리 컨트롤
// htiBranch - 복사할 가지
// htiNewParent - 복사시킬 곳의 부모 아이템
// htiAfter - 복사시킬 곳의 위치
// 리턴값 : 복사된 새로운 가지 아이템
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
HTREEITEM gfnTreeCopyBranch( CTreeCtrl& ctrlTree, HTREEITEM htiBranch, HTREEITEM htiNewParent,
HTREEITEM htiAfter = TVI_LAST )
{
HTREEITEM hChild;
// 일딴 자기 아이템을 복사한다.
HTREEITEM hNewItem = gfnTreeCopyItem( ctrlTree, htiBranch, htiNewParent, htiAfter );
hChild = ctrlTree.GetChildItem(htiBranch);
while( hChild != NULL)
{
// 가지 복사를 계속한다.
gfnTreeCopyBranch(ctrlTree, hChild, hNewItem);
hChild = ctrlTree.GetNextSiblingItem( hChild );
}
return hNewItem;
}
//=================================================================
// 함수명 : gfnSwapTreeItem
// 설 명 : 해당 트리에서 두 아이템을 스왑하는 함수
// 더 확장하면 두 트리 컨트롤에서의 아이템(가지)의 스왑도 가능
// 인 자 : ctrlTree - 해당 트리 컨트롤
// [in,out] phItem1 - 스왑하고자 하는 아이템1, 스왑후
// 새로 생성된 아이템을 가리킨다.
// [in,out] phItem2 - 스왑하고자 하는 아이템2, 스왑후
// 새로 생성된 아이템을 가리킨다.
// 리턴값 :
//-----------------------------------------------------------------
// 작성자 작성일 작성이유
// bro 2002-04-10 ChangePosition 오동작 픽스
//=================================================================
void gfnSwapTreeItem( CTreeCtrl& ctrlTree, HTREEITEM* phItem1, HTREEITEM* phItem2 )
{
HTREEITEM hItem1 = *phItem1;
HTREEITEM hItem2 = *phItem2;
// 각 브렌치를 복사한다.
HTREEITEM hParent1 = ctrlTree.GetParentItem( hItem1 );
*phItem1 = gfnTreeCopyBranch( ctrlTree, hItem2, hParent1, hItem1 );
// 각 브렌치를 복사한다.
HTREEITEM hParent2 = ctrlTree.GetParentItem( hItem2 );
*phItem2 = gfnTreeCopyBranch( ctrlTree, hItem1, hParent2, hItem2 );
// 기존의 브렌치는 삭제해 버린다.
ctrlTree.DeleteItem( hItem1 );
ctrlTree.DeleteItem( hItem2 );
}
// </bro-2002-04-10> 트리 아이뎀 올렸다 내렸다 하는 코드
'KB > MFC/Win32' 카테고리의 다른 글
파일 패스 매크로 (0) | 2004.03.19 |
---|---|
파일 시스템 변경에 대한 통보만 받기 위한다면 (0) | 2004.03.19 |
전역후크시 잘안될때 (0) | 2004.03.19 |
전역 핫키 설정하기 (0) | 2004.03.19 |
인터넷 되는지 확인하는 코드 (0) | 2004.03.19 |