树型控件拖动的完美实现

豆豆网   技术应用频道   2006年07月23日    社区交流

本文详细介绍树型控件拖动的完美实现

  本文示例源代码或素材下载

  树型控件用来显示具有一定层次结构的数据项时方便、直观,被广泛地应用在各种软件中,如资源管理器中的磁盘目录就用的是树型

  控件,我们在编程中也会经常用到,但 MFC 中提供的 CTreeCtrl 类并不直接支持拖动节点等高级特性,这使我们程序员编程时有很大限

  制,又给软件用户带来了一些不便。下面就让我们自己动手来解决这个问题,实现树型控件中节点的拖动。

  我们从 CTreeCtrl 中派生了一个类 CXTreeCtrl ,它具有如下的特点:

  ⑴ 基本拖动的实现。

  ⑵ 处理无意拖动。

  ⑶ 能处理拖动过程中的滚动问题。

  ⑷ 拖动过程中节点会智能展开。

  图 1 为示例程序的运行界面。

  (图 1)

  好,我们来一步一步实现上述功能。

  新建一对话框工程,编辑资源,在对话框中加入一树型控件 IDC_TREE ,属性设置如图 2,给该控件添加一个成员变量 m_wndTree ,

  类型改为CXTreeCtrl。从 CTreeCtrl 中派生一个类 CXTreeCtrl 。

(图 2)

  1、基本拖动的实现

  当我们要拖动一个项目时,树型视图控件会给它的父窗口发送TVN_BEGINDRAG通知消息。可以在此处创建表示项目处在拖动操作中

  的图象,调用 CreateDragImage 函数产生一副缺省的图象,该函数创建的图象由条目图象和标签文本组成。创建了拖动图象后,调用

  BeginDrag 函数指定拖动图象的热点位置,然后调用 DragEnter 函数显示拖动图象。接下来处理 WM_MOUSEMOVE 消息用于更新拖动图

作者:一块三毛钱    责编:豆豆技术应用

正在加载评论...