2016-04-28 58 views
0

我有一种方法可以禁止在CTreeCtrl的特定节点上拖放吗?CTreeCtrl禁止在特定节点上拖放

我想阻止将节点拖动到同一棵树内同一节点的子节点,并且还要防止将节点拖动到链接到同一节点或其子节点的列表视图。

回答

1

这只取决于您如何处理鼠标移动处理程序中的放置目标。

您无法阻止TVN_BEGINDRAG函数。但是,如果不应该拖动该项目,则始终在鼠标移动处理程序中使用SetDropTarget(NULL),如果拖动停止,则不执行任何操作。

当物品被允许拖动时,您只需检查目标是否被允许。您使用HitTest来查找目标物品,并且您可以检查是否允许在此处放置。再次使用SetDropTarget。所以用户可以看到什么是允许的。

另一种方式是实现Ole Drag &拖放函数like in this sample here

+0

是的,我已经使用OnDragOver覆盖处理掉落判定(对于其他情况),只是不知道是否有另一种方法来“暂时”禁用特定节点上的可丢弃性,而不是在OnDragOver中进行判断..我想在OnDragOver中,我递归检查HitTest中节点的父节点,看看它是否找到了拖拽的节点(因此不允许将父节点拖拽到它的一个子节点上)。只是希望这种方法已经存在。 –

+0

我想创建与Windows资源管理器相同的行为,当一个节点被拖拽到它的任何子节点时,它会在OnDragOver中返回一个DROPEFFECT_NONE。 –

+0

比实现自己的拖放像本采样器的列表控件http://codeproject.cachefly.net/Articles/12342/Drag-and-Drop-Listbox-Items-using-OLE – xMRi