树控件拖放操作

当用户开始拖动项时,树控件 (CTreeCtrl) 会发送通知。 当用户开始使用鼠标左键拖动项时,树控件会发送一条 TVN_BEGINDRAG 通知消息,当用户开始使用右键拖动时,树控件会发送一条 TVN_BEGINRDRAG 通知消息。 通过为树控件提供 TVS_DISABLEDRAGDROP 样式,可以防止树控件发送这些通知。

可以在拖动操作过程中通过调用 CreateDragImage 成员函数,获取要显示的图像。 树控件将基于所拖动的项标签创建一个拖动位图。 然后,树控件将创建一个图像列表,将位图添加到列表中,并返回指向 CImageList 对象的指针。

必须提供实际拖动项的代码。 这通常涉及使用图像列表函数的拖动功能和处理拖动操作开始之后发送的 WM_MOUSEMOVEWM_LBUTTONUP(或 WM_RBUTTONUP)消息。 有关图像列表函数的详细信息,请参阅 MFC 参考中的 CImageList 和 Windows SDK 中的图像列表。 有关拖动树控件项的详细信息,请参阅拖动树视图项(也在 Windows SDK 中)。

如果树控件中的项是拖放操作的目标,则需要了解鼠标光标何时指向了目标项。 可以通过调用 HitTest 成员函数了解到这一点。 指定一个点和整数,或指定包含鼠标光标的当前坐标的 TVHITTESTINFO 结构的地址。 当函数返回时,该整数或结构包含一个指示与树控件相关的鼠标光标的位置的标志。 如果光标在树控件中的某个项的上方,则该结构还包含该项的句柄。

可以通过以下方法指示某个项是拖放操作的目标:调用 SetItem 成员函数将状态设置为 TVIS_DROPHILITED 值。 使用用于指示拖放目标的样式绘制具有此状态的项。

另请参阅

使用 CTreeCtrl
Controls