// <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

+ Recent posts