树控件拖放作

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

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

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

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

可以通过调用 SetItem 成员函数将状态 TVIS_DROPHILITED 设置为值来指示项是拖放作的目标。 在用于指示拖放目标的样式中绘制具有此状态的项。

另请参阅

使用 CTreeCtrl
控件