CTreeCtl的使用的一点总结:
一、设置与tree control控件相关联的图片列表
CImageList imageList;
CTreeCtl treeCtl;
imageList.Create(IDB_BITMAP, 16, 1, RGB(255,255,255));
treeCtl.SetImageList( imageList, TVSIL_NORMAL );
二、tree control标签基本拖动的实现
(参考vckbase中,树型控件拖动的完美实现 作者:一块三毛钱 http://www.vckbase.com/document/viewdoc/?id=340)
1、拖动时,控件会发送TVN_BEGINDRAG消息,添加该消息响应函数。在函数中创建拖动标签的一副图象。
CImageLis* image = treeCtl.CreateDragImage( hItem );
注:该函数只能在CTreeCtrl带位图的时候才起作用
然后调用CImageList的BeginDrag开始拖动:
image->BeginDrag( 0, CPoint(0,0) );
调用CImageList的DragEnter显示拖动的图象:
image->DragEnter( pWndLock, point );
SetCapture(); //捕捉鼠标
2、处理WM_MOUSEMOVE消息
CImageList::DragMove(point); //在拖动过程中移动被拖动的图片
调用SelectDropTarget高亮显示移动过程中图象经过的项。
CImageList::DragShowNolock( false ); //隐藏图象列表
treeCtl.SelectDropTarget( item );
CImageList::DragShowNolock( true ); //恢复图象列表的显示
3、处理WM_LBUTTONUP消息
CImageList::DragLeave( hWnd ); //解锁所指窗口并隐藏图片,完成窗口更新
CImageList::EndDrag(); //Ends a drag operation
ReleaseCapture(); //释放鼠标
image->Destroy();
m_treeCtl.SelectDropTarget( NULL );
4、拷贝所托的标签以及其子标签到指定位置
// 拷贝条目
HTREEITEM CopyItem(HTREEITEM hItem, HTREEITEM hParent,HTREEITEM hInsertAfter)
{
TVINSERTSTRUCT insertStruct;
WCHAR text[50] = L"";
HTREEITEM hNewItem;
//得到源条目的信息
insertStruct.item.hItem = hItem;
insertStruct.item.mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
m_treeCtl.GetItem( &insertStruct.item );
m_treeCtl.GetItemText( hItem, text, 50 );
insertStruct.item.pszText = text;
insertStruct.item.cchTextMax = 50;
//将条目插入到合适的位置
insertStruct.hParent = hParent;
insertStruct.hInsertAfter = hInsertAfter;
insertStruct.item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM;
hNewItem = m_treeCtl.InsertItem( &insertStruct );
return hNewItem;
}
//拷贝分支
HTREEITEM CopyBranch(HTREEITEM htiBranch, HTREEITEM htiNewParent, HTREEITEM htiAfter)
{
HTREEITEM hNewItem = CopyItem( htiBranch, htiNewParent, htiAfter );
HTREEITEM hChildItem = m_treeCtl.GetChildItem( htiBranch );
while( hChildItem != NULL )
{
CopyBranch( hChildItem, hNewItem, htiAfter );
hChildItem = m_treeCtl.GetNextSiblingItem( hChildItem );
}
return hNewItem;
}
一、设置与tree control控件相关联的图片列表
CImageList imageList;
CTreeCtl treeCtl;
imageList.Create(IDB_BITMAP, 16, 1, RGB(255,255,255));
treeCtl.SetImageList( imageList, TVSIL_NORMAL );
二、tree control标签基本拖动的实现
(参考vckbase中,树型控件拖动的完美实现 作者:一块三毛钱 http://www.vckbase.com/document/viewdoc/?id=340)
1、拖动时,控件会发送TVN_BEGINDRAG消息,添加该消息响应函数。在函数中创建拖动标签的一副图象。
CImageLis* image = treeCtl.CreateDragImage( hItem );
注:该函数只能在CTreeCtrl带位图的时候才起作用
然后调用CImageList的BeginDrag开始拖动:
image->BeginDrag( 0, CPoint(0,0) );
调用CImageList的DragEnter显示拖动的图象:
image->DragEnter( pWndLock, point );
SetCapture(); //捕捉鼠标
2、处理WM_MOUSEMOVE消息
CImageList::DragMove(point); //在拖动过程中移动被拖动的图片
调用SelectDropTarget高亮显示移动过程中图象经过的项。
CImageList::DragShowNolock( false ); //隐藏图象列表
treeCtl.SelectDropTarget( item );
CImageList::DragShowNolock( true ); //恢复图象列表的显示
3、处理WM_LBUTTONUP消息
CImageList::DragLeave( hWnd ); //解锁所指窗口并隐藏图片,完成窗口更新
CImageList::EndDrag(); //Ends a drag operation
ReleaseCapture(); //释放鼠标
image->Destroy();
m_treeCtl.SelectDropTarget( NULL );
4、拷贝所托的标签以及其子标签到指定位置
// 拷贝条目
HTREEITEM CopyItem(HTREEITEM hItem, HTREEITEM hParent,HTREEITEM hInsertAfter)
{
TVINSERTSTRUCT insertStruct;
WCHAR text[50] = L"";
HTREEITEM hNewItem;
//得到源条目的信息
insertStruct.item.hItem = hItem;
insertStruct.item.mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
m_treeCtl.GetItem( &insertStruct.item );
m_treeCtl.GetItemText( hItem, text, 50 );
insertStruct.item.pszText = text;
insertStruct.item.cchTextMax = 50;
//将条目插入到合适的位置
insertStruct.hParent = hParent;
insertStruct.hInsertAfter = hInsertAfter;
insertStruct.item.mask = TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_PARAM;
hNewItem = m_treeCtl.InsertItem( &insertStruct );
return hNewItem;
}
//拷贝分支
HTREEITEM CopyBranch(HTREEITEM htiBranch, HTREEITEM htiNewParent, HTREEITEM htiAfter)
{
HTREEITEM hNewItem = CopyItem( htiBranch, htiNewParent, htiAfter );
HTREEITEM hChildItem = m_treeCtl.GetChildItem( htiBranch );
while( hChildItem != NULL )
{
CopyBranch( hChildItem, hNewItem, htiAfter );
hChildItem = m_treeCtl.GetNextSiblingItem( hChildItem );
}
return hNewItem;
}