社区
界面
帖子详情
树型控件之间节点的拖动
rulera
2007-05-18 10:48:27
如题 怎样进行节点直接的拖拽呢 谢谢
...全文
220
1
打赏
收藏
树型控件之间节点的拖动
如题 怎样进行节点直接的拖拽呢 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yecheng_110
2007-05-18
打赏
举报
回复
搜一下这篇文章
“VC程序中树型控件节点拖动的完美实现”
微软
树型
控件
拖动
节点
、增加
节点
、删除
节点
等功能演示.zip
treeview微软
树型
控件
拖动
节点
、增加
节点
、删除
节点
等功能演示.zip
C#实现
树型
结构TreeView
节点
拖拽的简单功能,附全部源码,供有需要的参考
C_实现
树型
结构TreeView
节点
拖拽的简单功能,附全部源码,供有需要的参考
实现树
控件
的
拖动
Visual C++中提供的MFC类CtreeCtrl(
树型
控件
)用来显示具有一定层次结构的数据项时方便、直观,所以它已经被广泛地应用在各种软件中,如资源管理器中的磁盘目录就用的是
树型
控件
,我们在编程中也会经常用到这个
控件
,但是这个
控件
也有缺陷,那就是它并不直接支持
拖动
节点
等高级特性,这使得程序员在编程时使用它受到了很大限制,同时又给软件用户带来了一些不便。为此,本实例通过从 CTreeCtrl 中派生了一个类 CXTreeCtrl ,实现
树型
控件
中
节点
的
拖动
。这个类具有如下的功能:⑴ 基本项目条
拖动
的实现;⑵ 处理项目条的无意
拖动
;⑶ 能处理项目条
拖动
过程中的滚动问题;⑷
拖动
过程中
节点
会智能展开。程序编译运行后的效果如图所示:
VC类似QQ游戏大厅导航的
树型
控件
第一步:新建一个基于对话框的MFC工程,
拖动
一棵标准
树型
控件
放于界面之上。添加一个新类CTreeCtrlBT派生自CTreeCtrl。 第二步:为该类添加一些消息响应以及虚函数。其详细作用如下: void PreSubclassWindow(); //用于添加初始化
控件
的相关信息 WM_SIZE //
控件
区域发生变化时候的处理 WM_PAINT //绘制
控件
WM_MOUSEMOVE //主要获取鼠标所在位置的单元项 第三步:TreeCtrlBT.h中首先声明一个结构用于保存单元项的相关信息,并把所有项的信息放入一个map。实现代码如下: typedef struct tagItemMsg { HTREEITEM hItem; //项的句柄 CBitmap ItemBitmap; //项的位图 COLORREF crTransparent; //透明颜色 tagItemMsg() { hItem = NULL; crTransparent = RGB(255,255,255); } ~tagItemMsg() { if ( ItemBitmap.GetSafeHandle() ) { ItemBitmap.DeleteObject(); } } }ITEM_MSG; typedef map ITEMMSG_MAP; 第四步:计算
控件
的客户区域大小,以及滚动条滚动的偏移量。详细过程参考源代码 Calculate函数。 第五步:添加接口函数以及成员变量。如下: (注意:TransparentBlt函数,需要包含msimg32.dll) //设置背景位图BOOL SetBackgroudBitmap( UINT nID );BOOL SetBackgroudBitmap(LPCTSTR lpszRecourceName);//设置某一项位图void SetItemBitmap(HTREEITEM hItem, UINT nIdBitmap);void SetItemBitmap(HTREEITEM hItem, LPCTSTR lpszBitmap);//设置展开收缩的图表void SetExpandBitmap(UINT nIdExpand, UINT nIdCollapse, COLORREF crTransparent = RGB(255,255,255));//插入新的项目HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, UINT nIdBitmap = 0, OLORREF crTransparent = RGB(255,255,255));HTREEITEM InsertItemEx(HTREEITEM hParent, LPCTSTR lpszItem, LPCTSTR lpszBitmap, COLORREF crTransparent = RGB(255,255,255));//开启横线void EnableRowLine( BOOL bEnable = TRUE );//是否开启横线BOOL IsEnableRowLine();//开启根
节点
背景void EnableRootBk( BOOL bEnable = TRUE );//是否开启根
节点
背景BOOL IsEnableRootBk();//获取某一项信息ITEM_MSG* GetItemMsg(HTREEITEM hItem); 第六步:绘制
控件
。需要的绘制函数如下: //绘制渐变色矩形区域void GradientFillRect( CDC *pDC, CRect &rect, COLORREF col_from, COLORREF col_to, bool vert_grad ); //绘制
控件
背景void DrawBackgroudBitmap(CDC* pDc); //绘制单元项void DrawItem( CDC* pDC ); //绘制单元项下部横线void DrawRowLine(CPoint ptBegin, CPoint ptEnd, CDC *pDc = NULL); //绘制展开收缩按钮void DrawExpand(CRect rect, int state,
可拖拽树
节点
的CTreeCtrl
仅仅实现了机于mfc
树型
控件
的拖拽,具体请查找相关资料
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章