1

選択したディレクトリのフルパスを表示する簡単なアプリを作成しようとしていますが、これまでに取得できるのはディレクトリの名前だけです。

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);
}

これは私のコードです。アドバイスしてもらえますか?

4

2 に答える 2

5

あなたはそれをコーディングしすぎています。これは私のために働きます:

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);
于 2015-03-14T04:48:03.513 に答える
0
CString fullpath;
HTREEITEM current = hItem.hItem;
while (current != NULL) 
{
   CString thistext = GetTreeCtrl()->GetItemText(current);
   fullpath = thistext + _T("\\") + fullpath;
   current = GetTreeCtrl()->GetParentItem(current);
}

私は実際にこれをテストしていませんが、これは一般的な考え方ですが、正しい方向に進むはずです。

于 2012-12-23T09:36:26.197 に答える