CTreeCtrl 禁用拖放特定节点

CTreeCtrl disable drag and drop on specific nodes

我有办法在 CTreeCtrl 的特定节点上禁用拖放吗?

我想防止将节点拖动到同一棵树中同一节点的子节点,也防止将节点拖动到链接到同一节点或其子节点之一的列表视图。

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

您无法阻止 TVN_BEGINDRAG 功能。但是如果项目根本不应该被拖动,你总是在鼠标移动处理程序中使用 SetDropTarget(NULL),如果拖动停止你什么都不做。

当item被允许拖动时,你只需要检查目标是否被允许。你使用HitTest找到目标物品,你可以检查它是否允许在这里掉落。再次使用 SetDropTarget。所以用户可以看到什么是允许的。

另一种方法是实现 Ole 拖放功能 like in this sample here