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

转载于:https://www.cnblogs.com/cwbo-win/p/3370163.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值