MFC ShellTreeCtrl选中元素完整路径

时间:2012-12-23 08:55:12

标签: visual-c++ mfc

我正在尝试构建一个显示我选择的目录的完整路径的简单应用, 但是到目前为止我唯一能得到的就是目录的名称:

void CFolderBrowserDlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
TVITEMW hItem = pNMTreeView->itemNew;
TCHAR szText[256];
hItem.pszText= szText;
hItem.cchTextMax= 256*sizeof(TCHAR);
hItem.mask= TVIF_TEXT;
TreeView_GetItem(pNMTreeView->hdr.hwndFrom,&hItem);
m_Folder= szText;
UpdateData(FALSE);
}

这是我的代码。你可以告诉我吗?

2 个答案:

答案 0 :(得分:3)

你正在编码。这对我有用:

void CMFCdlg1Dlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    m_Tree.GetItemPath(m_EditString, pNMTreeView->itemNew.hItem);
    UpdateData(false);
}   

成员变量是:

m_Tree, type CMFCShelltreeCtrl attached to the ShellTree control
m_EditString, type CString attached to the Edit control

如果你需要它,你甚至可以得到一个C风格的字符串:

LPTSTR path = m_EditString.GetBuffer(0);

答案 1 :(得分:0)

CString fullpath;
HTREEITEM current = hItem.hItem;
while (current != NULL) 
{
   CString thistext = GetTreeCtrl()->GetItemText(current);
   fullpath = thistext + _T("\\") + fullpath;
   current = GetTreeCtrl()->GetParentItem(current);
}

这是一般的想法,虽然我没有真正测试过这个,但它应该让你朝着正确的方向前进。