Visual c++ MFC ShellTreeCtrl选定元素完整路径

Visual c++ MFC ShellTreeCtrl选定元素完整路径,visual-c++,mfc,Visual C++,Mfc,我正在尝试构建一个简单的应用程序,显示我选择的目录的完整路径, 但是,到目前为止,我只能得到目录的名称: void CFolderBrowserDlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: Add your control notifi

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

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);
}
void CFolderBrowserDlg::OnTvnSelchangedMfcshelltree1(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMTREEVIEW pNMTreeView=重新解释铸件(pNMHDR);
//TODO:在此处添加控件通知处理程序代码
*预设值=0;
TVITEMW hItem=pNMTreeView->itemNew;
TCHAR-szText[256];
hItem.pszText=szText;
hItem.cchTextMax=256*sizeof(TCHAR);
hItem.mask=TVIF_文本;
TreeView_GetItem(pNMTreeView->hdr.hwndFrom和hItem);
m_Folder=szText;
更新数据(假);
}
这是我的密码。你能给我一些建议吗

CString fullpath;
HTREEITEM current = hItem.hItem;
while (current != NULL) 
{
   CString thistext = GetTreeCtrl()->GetItemText(current);
   fullpath = thistext + _T("\\") + fullpath;
   current = GetTreeCtrl()->GetParentItem(current);
}
这是一般的想法,虽然我没有实际测试,但它应该让你朝着正确的方向前进


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

您编写的代码太多了。这对我很有用:

void CMFCdlg1Dlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    m_Tree.GetItemPath(m_EditString, pNMTreeView->itemNew.hItem);
    UpdateData(false);
}   
如果您需要C样式的字符串,您甚至可以获得它:

LPTSTR path = m_EditString.GetBuffer(0);

你把它编得太多了。这对我很有用:

void CMFCdlg1Dlg::OnTvnSelchangedMfcshelltree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    m_Tree.GetItemPath(m_EditString, pNMTreeView->itemNew.hItem);
    UpdateData(false);
}   
如果您需要C样式的字符串,您甚至可以获得它:

LPTSTR path = m_EditString.GetBuffer(0);

我不知道你说的GetTreeCtrl()是什么意思,对不起,我是MFCWell的新手,如果你使用CTreeView,那么你必须使用GetTreeCtrl()方法来获取实际的CTreeCtrl对象,这是一个拥有与实际树控件交互所需的所有优点的类。我不知道你说的GetTreeCtrl()是什么意思,抱歉,我是MFCWell的新手,如果您使用CTreeView,那么您必须使用GetTreeCtrl()方法来获取实际的CTreeCtrl对象,该类具有与实际树控件交互所需的所有优点。