CTreeCtl的使用

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

posted @ 2013-10-15 14:15  陳さん様  阅读(388)  评论(0)    收藏  举报