CTreeCtrl отключить перетаскивание на определенных узлах
Есть ли способ отключить перетаскивание на определенных узлах CTreeCtrl?
Я хотел бы предотвратить перетаскивание узла к дочернему элементу того же узла в том же дереве, а также предотвратить перетаскивание узла в просмотр списка, связанный с тем же узлом или одним из его дочерних элементов.
1 ответ
Это зависит только от того, как вы обрабатываете цель отбрасывания в обработчике мыши
Вы не можете предотвратить TVN_BEGINDRAG
функция. Но если предмет вообще не нужно перетаскивать, вы всегда используете SetDropTarget(NULL)
в обработчике перемещения мыши, и если перетаскивание останавливается, вы ничего не делаете.
Когда элемент можно перетаскивать, вам просто нужно проверить, разрешена ли цель. Ты используешь HitTest
чтобы найти целевой предмет, и вы можете проверить, разрешено ли здесь сбросить. Снова использовать SetDropTarget
, Таким образом, пользователь может видеть, что разрешено.
Другим способом было бы реализовать функции Ole Drag&Drop, как в этом примере здесь.