更改 MFC CTreeCtrl 中现有项目的位置

问题描述 投票:0回答:1

目前我正在试验 C++ MFC 的

CTreeCtrl
组件。我想通过使用项目的新父项将现有项目移动到树中的另一个位置。子项目也被移动是很重要的。

我认为你可以使用

InsertItem
TVINSERTSTRUCT
来实现目标。但我不知道具体怎么做。

如果您能提供代码片段那就太好了。预先感谢!

tree mfc
1个回答
0
投票

我在 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.