如何在 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 的完整路径的主要内容,如果未能解决你的问题,请参考以下文章