0
我有一种方法可以禁止在CTreeCtrl的特定节点上拖放吗?CTreeCtrl禁止在特定节点上拖放
我想阻止将节点拖动到同一棵树内同一节点的子节点,并且还要防止将节点拖动到链接到同一节点或其子节点的列表视图。
我有一种方法可以禁止在CTreeCtrl的特定节点上拖放吗?CTreeCtrl禁止在特定节点上拖放
我想阻止将节点拖动到同一棵树内同一节点的子节点,并且还要防止将节点拖动到链接到同一节点或其子节点的列表视图。
这只取决于您如何处理鼠标移动处理程序中的放置目标。
您无法阻止TVN_BEGINDRAG
函数。但是,如果不应该拖动该项目,则始终在鼠标移动处理程序中使用SetDropTarget(NULL)
,如果拖动停止,则不执行任何操作。
当物品被允许拖动时,您只需检查目标是否被允许。您使用HitTest
来查找目标物品,并且您可以检查是否允许在此处放置。再次使用SetDropTarget
。所以用户可以看到什么是允许的。
另一种方式是实现Ole Drag &拖放函数like in this sample here。
是的,我已经使用OnDragOver覆盖处理掉落判定(对于其他情况),只是不知道是否有另一种方法来“暂时”禁用特定节点上的可丢弃性,而不是在OnDragOver中进行判断..我想在OnDragOver中,我递归检查HitTest中节点的父节点,看看它是否找到了拖拽的节点(因此不允许将父节点拖拽到它的一个子节点上)。只是希望这种方法已经存在。 –
我想创建与Windows资源管理器相同的行为,当一个节点被拖拽到它的任何子节点时,它会在OnDragOver中返回一个DROPEFFECT_NONE。 –
比实现自己的拖放像本采样器的列表控件http://codeproject.cachefly.net/Articles/12342/Drag-and-Drop-Listbox-Items-using-OLE – xMRi