博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CTreeCtl的使用
阅读量:6870 次
发布时间:2019-06-26

本文共 2131 字,大约阅读时间需要 7 分钟。

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

你可能感兴趣的文章
IP地址解析
查看>>
iPhone开发之object c基础一定义接口
查看>>
Linux下清除磁盘分区及残留raid信息
查看>>
如何确认第二个sskgslcas就是获得Buffer Pin锁
查看>>
在Eclipse中配置tomcat
查看>>
Python基础
查看>>
springboot加载顺序
查看>>
python chapter 学习之序列
查看>>
我的友情链接
查看>>
Linux下如何知道自己外网的IP
查看>>
GlusterFS的基础应用
查看>>
DRBD+Heartbeat
查看>>
Ubuntu下vsftpd安装和配置
查看>>
IT运维之Linux服务器监控方案
查看>>
ORA-09925: Unable to create audit trail file Linux-x86_64
查看>>
安全存储专家usse
查看>>
pthon socket之SocketServer
查看>>
MySQL数值类型
查看>>
TCP、UDP下的套接字编程
查看>>
jboss7-的默认系统日志
查看>>