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; }