2016-04-28 28 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