上位机MFC树状控件显示目录文件夹功能
例程使用树状控件显示出指定目录 全部文件夹的功能。
效果如上图。
关键代码为:
- DWORD dwStyle = GetWindowLong(m_tree.m_hWnd,GWL_STYLE);
- dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
- SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle);
- m_hRoot = m_tree.InsertItem("我的电脑");
- GetLogicalDrives(m_hRoot);
- GetDriveDir(m_hRoot);
- m_tree.Expand(m_hRoot,TVE_EXPAND);
复制代码
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- //函数功能:获取驱动器
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- void CTreeDlgDlg::GetLogicalDrives(HTREEITEM hParent)
- {
- size_t szAllDriveStrings = GetLogicalDriveStrings(0,NULL);
- char *pDriveStrings = new char[szAllDriveStrings + sizeof(_T(""))];
- GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings);
- size_t szDriveString = strlen(pDriveStrings);
- while(szDriveString > 0)
- {
- m_tree.InsertItem(pDriveStrings,hParent);
- pDriveStrings += szDriveString + 1;
- szDriveString = strlen(pDriveStrings);
- }
- }
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- //函数功能:添加子项
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- void CTreeDlgDlg::GetDriveDir(HTREEITEM hParent)
- {
- HTREEITEM hChild = m_tree.GetChildItem(hParent);
- while(hChild)
- {
- CString strText = m_tree.GetItemText(hChild);
- if(strText.Right(1) != "\")
- strText += _T("\");
- strText += "*.*";
- CFileFind file;
- BOOL bContinue = file.FindFile(strText);
- while(bContinue)
- {
- bContinue = file.FindNextFile();
- if(file.IsDirectory() && !file.IsDots())
- m_tree.InsertItem(file.GetFileName(),hChild);
- }
- GetDriveDir(hChild);
- hChild = m_tree.GetNextItem(hChild,TVGN_NEXT);
- }
- }
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- //函数功能:展开事件函数
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- void CTreeDlgDlg::OnItemexpandedTree1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
- // TODO: Add your control notification handler code here
- TVITEM item = pNMTreeView->itemNew;
- if(item.hItem == m_hRoot)
- return;
-
- HTREEITEM hChild = m_tree.GetChildItem(item.hItem);
- while(hChild)
- {
- AddSubDir(hChild);
- hChild = m_tree.GetNextItem(hChild,TVGN_NEXT);
- }
- *pResult = 0;
-
- }
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- //函数功能:获取树项目全跟径
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- CString CTreeDlgDlg::GetFullPath(HTREEITEM hCurrent)
- {
- CString strTemp;
- CString strReturn = "";
- while(hCurrent != m_hRoot)
- {
- strTemp = m_tree.GetItemText(hCurrent);
- if(strTemp.Right(1) != "\")
- strTemp += "\";
- strReturn = strTemp + strReturn;
- hCurrent = m_tree.GetParentItem(hCurrent);
- }
-
- return strReturn;
- }
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- //添加子目录
- //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- void CTreeDlgDlg::AddSubDir(HTREEITEM hParent)
- {
- CString strPath = GetFullPath(hParent);
- if(strPath.Right(1) != "\")
- strPath += "\";
- strPath += "*.*";
- CFileFind file;
- BOOL bContinue = file.FindFile(strPath);
- while(bContinue)
- {
- bContinue = file.FindNextFile();
- if(file.IsDirectory() && !file.IsDots())
- m_tree.InsertItem(file.GetFileName(),hParent);
- }
- }
复制代码 源代码下载地址:
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|