树型控件拖动的完美实现
2006-07-23 11:20:32 来源:WEB开发网核心提示:本文示例源代码或素材下载 树型控件用来显示具有一定层次结构的数据项时方便、直观,被广泛地应用在各种软件中,树型控件拖动的完美实现,如资源管理器中的磁盘目录就用的是树型控件,我们在编程中也会经常用到,创建了拖动图象后,调用BeginDrag 函数指定拖动图象的热点位置,但 MFC 中提供的 CTreeCtrl 类
本文示例源代码或素材下载
树型控件用来显示具有一定层次结构的数据项时方便、直观,被广泛地应用在各种软件中,如资源管理器中的磁盘目录就用的是树型
控件,我们在编程中也会经常用到,但 MFC 中提供的 CTreeCtrl 类并不直接支持拖动节点等高级特性,这使我们程序员编程时有很大限
制,又给软件用户带来了一些不便。下面就让我们自己动手来解决这个问题,实现树型控件中节点的拖动。
我们从 CTreeCtrl 中派生了一个类 CXTreeCtrl ,它具有如下的特点:
⑴ 基本拖动的实现。
⑵ 处理无意拖动。
⑶ 能处理拖动过程中的滚动问题。
⑷ 拖动过程中节点会智能展开。
图 1 为示例程序的运行界面。
(图 1)
好,我们来一步一步实现上述功能。
新建一对话框工程,编辑资源,在对话框中加入一树型控件 IDC_TREE ,属性设置如图 2,给该控件添加一个成员变量 m_wndTree ,
类型改为CXTreeCtrl。从 CTreeCtrl 中派生一个类 CXTreeCtrl 。
(图 2)1、基本拖动的实现
当我们要拖动一个项目时,树型视图控件会给它的父窗口发送TVN_BEGINDRAG通知消息。可以在此处创建表示项目处在拖动操作中
的图象,调用 CreateDragImage 函数产生一副缺省的图象,该函数创建的图象由条目图象和标签文本组成。创建了拖动图象后,调用
BeginDrag 函数指定拖动图象的热点位置,然后调用 DragEnter 函数显示拖动图象。接下来处理 WM_MOUSEMOVE 消息用于更新拖动图
赞助商链接