如何在 MFC 中的 CTreeCtl 中获取一直到 root 的完整路径

Posted

技术标签:

【中文标题】如何在 MFC 中的 CTreeCtl 中获取一直到 root 的完整路径【英文标题】:How to get full path all the way to root in CTreeCtl in MFC 【发布时间】:2020-01-02 08:05:13 【问题描述】:

我正在使用来自 ftp 服务器的目录和子目录填充树控件。我已经有代码工作但无法获得完整路径。 当我双击树项目时,如何获得一直到所选子目录根目录的完整路径。我将不得不手动执行此操作吗?

例如..

ROOT
     FOLDER A 1
           FOLDER A 2
     FOLDER B 1

所以如果我点击FOLDER A 2,我怎样才能得到路径/ROOT/FOLDER A 1/FOLDER A 2

【问题讨论】:

欢迎来到 Stack Overflow!如果您向我们展示一些将您的请求置于“上下文”中的示例代码,那么您可能会得到一个或多个很好的答案,向您展示如何实现您的目标。 另外,您是否考虑过使用CMFCShellTreeCtrl - 专为文件和文件夹使用而设计。 【参考方案1】:

CTreeCtrl 提供基本的控制功能。实现业务逻辑由您来完成。要获得根项目的路径,您必须连接各个路径部分。您可以在不同的时间执行此操作:

填充控件时

树项允许您在显示文本旁边存储自定义数据。填充树控件时,您可以通过在对CTreeCtrl::InsertItem 的调用中设置lParam 参数来存储指向数据的指针(例如具有完整路径的字符串)。您可以稍后调用 CTreeCtrl::GetItemData 检索它。

按需

您也可以根据需要构建完整路径,方法是遍历树结构一直到根元素,沿途连接每个路径部分。以下代码作为起点:

CStringW PathFromItem(CTreeCtrl const& tree, HTREEITEM hItem)

    CStringW path tree.GetItemText(hItem) ;
    while (hItem = tree.GetParentItem(hItem))
    
        path = tree.GetItemText(hItem) + L"\\" + path;
    
    path = tree.GetItemText(tree.GetRootItem()) + L"\\" + path;
    return path;

另类

作为替代方案,您应该评估CMFCShellTreeCtrl 是否适合您。它显示了 Shell 项的层次结构,并且可以仅限于包括文件系统项。

【讨论】:

以上是关于如何在 MFC 中的 CTreeCtl 中获取一直到 root 的完整路径的主要内容,如果未能解决你的问题,请参考以下文章

MFC底层窗口实现

MFC获取指定文件夹文件目录

MFC如何获取控件在对话框上的位置坐标

mfc如何将一个编辑框中的数字追加到另一个编辑框,不是覆盖,而是接在原来的后面显示?

在mfc中如何使用按钮依次输入数据

在mfc中如何判断输入的是不是为汉字?