目前我正在试验 C++ MFC 的
CTreeCtrl
组件。我想通过使用项目的新父项将现有项目移动到树中的另一个位置。子项目也被移动是很重要的。
我认为你可以使用
InsertItem
和 TVINSERTSTRUCT
来实现目标。但我不知道具体怎么做。
如果您能提供代码片段那就太好了。预先感谢!
我在 CodeGuru 上找到了您问题的答案(从 2005 年开始)。
如果链接无法保存太久,以下是相关代码:
void CMyTreeCtrl::MoveItem(HTREEITEM hitemToBeMoved, HTREEITEM hitemInsertAfter)
{
TV_INSERTSTRUCT tvStruct;
TCHAR cBuffer[50];
HTREEITEM hNewItem;
tvStruct.item.hItem = hitemToBeMoved;
tvStruct.item.cchTextMax = 49;
tvStruct.item.pszText = cBuffer;
tvStruct.item.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
GetItem(&tvStruct.item);
tvStruct.hParent = GetParentItem(hitemInsertAfter);
tvStruct.hInsertAfter = hitemInsertAfter;
tvStruct.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
hNewItem = InsertItem(&tvStruct);
HTREEITEM hChild = GetChildItem(hitemToBeMoved);
while(hChild != NULL)
{
TransferItem(hChild, hNewItem);
DeleteItem(hChild);
hChild = GetChildItem(hitemToBeMoved);
}
DeleteItem(hitemToBeMoved);
}