【问题标题】:CTreeCtrl disable drag and drop on specific nodesCTreeCtrl 禁用特定节点上的拖放
【发布时间】:2016-04-28 03:51:12
【问题描述】:

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

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

【问题讨论】:

    标签: c++ mfc treecontrol


    【解决方案1】:

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

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

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

    另一种方法是实现 Ole Drag&Drop 函数like in this sample here

    【讨论】:

    • 是的,我已经在使用 OnDragOver 覆盖来处理丢弃确定(对于其他情况),只是不知道是否有另一种方法可以“暂时”禁用特定节点上的可丢弃性而不是计算它在 OnDragOver 中也是如此。我想在 OnDragOver 中,我递归地检查 HitTest 中节点的节点的父节点,以查看它是否找到拖动的节点(因此不允许将父节点拖动到它的一个子节点)。只是希望这种方法已经存在。
    • 我想创建与 windows 资源管理器相同的行为,当一个节点被拖动到它的任何子节点上时,它会在 OnDragOver 中返回一个 DROPEFFECT_NONE。
    • 比在此采样器中为列表控件实现自己的拖放操作codeproject.cachefly.net/Articles/12342/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多