mfc多文档CViewTree获取文件路径
时间: 2023-05-30 14:02:31 浏览: 143
MFC 多文档多视图示例
在MFC多文档应用程序中,CViewTree类通常用于显示文件夹结构。要获取当前选中的文件的路径,可以使用以下代码:
```
// 获取当前选中项
HTREEITEM hItem = GetSelectedItem();
// 获取该项的数据
MY_TREE_DATA* pData = (MY_TREE_DATA*)GetItemData(hItem);
// 获取文件路径
CString strFilePath = pData->strFilePath;
```
其中,MY_TREE_DATA是自定义的树节点数据结构,可以包含文件路径等信息。在CMainFrame类中,可以在OnCreate函数中设置树节点的数据结构:
```
// 设置树节点数据结构
m_wndFileView.SetImageList(&m_FileViewImages, TVSIL_NORMAL);
m_wndFileView.SetItemHeight(18);
m_wndFileView.SetItemData(m_wndFileView.GetRootItem(), (DWORD_PTR)&m_pDocManager);
```
在CViewTree类中,可以在OnSelChanged函数中获取当前选中的文件路径:
```
void CViewTree::OnSelChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// 获取当前选中项
HTREEITEM hItem = GetSelectedItem();
// 获取该项的数据
MY_TREE_DATA* pData = (MY_TREE_DATA*)GetItemData(hItem);
// 获取文件路径
CString strFilePath = pData->strFilePath;
// 将文件路径发送给视图
((CMainFrame*)AfxGetMainWnd())->SendMessage(WM_VIEW_FILE, 0, (LPARAM)(LPCTSTR)strFilePath);
*pResult = 0;
}
```
在CMainFrame类中,可以处理WM_VIEW_FILE消息,以在视图中打开选中的文件:
```
// 处理WM_VIEW_FILE消息
afx_msg LRESULT OnViewFile(WPARAM wParam, LPARAM lParam)
{
CString strFilePath = (LPCTSTR)lParam;
// 打开文件
CDocument* pDoc = m_pDocManager->OpenDocumentFile(strFilePath);
if (pDoc != NULL)
{
// 获取视图
CView* pView = pDoc->GetFirstView();
if (pView != NULL)
{
// 将视图设置为活动视图
SetActiveView(pView);
}
}
return 0;
}
```
阅读全文