请教各位大虾,怎样把某个磁盘的所有文件夹都加入树形控件
比如c :盘下有文件夹asd,abc,qwe,其中 abc下有文件夹cde
让c:成为根节点,asd,abc,qwe成为子节点cde成为孙节点
比如c :盘下有文件夹asd,abc,qwe,其中 abc下有文件夹cde
让c:成为根节点,asd,abc,qwe成为子节点cde成为孙节点
解决方案 »
- excel 导出数据到 程序中 出现的问题,请赐教,分多多~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 为什么我程序按钮和Windows自带的计算器按钮不一样?
- [菜鸟求助]关于VC++*ActiveMovie控件
- dll引出时,这样对吗?
- 如何将动态创建的控件与事件一一对应
- 你使用过ftpnetdrive吗?它可以把一个ftp站点映射为一个网络硬盘
- 该培训中心如何?有人知道吗?
- 初学者的问题:组件、控件、插件、第三方控件各是什么意思?它们有什么区别?谢谢!
- 简单问题
- 如何用fopen fwrite修改文件
- 关于数据库查询,结果存在COBLIST
- 求助!fprintf没有正常输出
void C树形显示文件夹Dlg::OnBnClickedButton1()
{
//这段用来调用浏览通用对话框,openfile通用对话框用来打开文件, 浏览则用来选定文件夹
BROWSEINFO bi;
ITEMIDLIST *pidl;
char buf[MAX_PATH] = {0};
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = (LPWSTR)buf;
bi.lpszTitle = _T("");
bi.ulFlags = BIF_EDITBOX;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
SHGetPathFromIDList(pidl,(LPWSTR)buf);
m_path.SetWindowTextW((LPWSTR)buf);
UpdateData(FALSE);
m_MyTreeCtrl.DeleteAllItems();
if (m_path.GetWindowTextLengthW()==0)
{
AfxMessageBox(L"请选择一个文件夹");
}
else
{
HTREEITEM root = m_MyTreeCtrl.InsertItem ((LPWSTR)buf);
showtree((LPWSTR)buf,root);
}
}
//还有一种是用CFileFind的, 好像还更简单一些, 因为CFileFind有好多可以直接用的成员函数, 变量
//第二个参数的设置是跟网页上的程序学的, 很巧妙的解决了树形显示中插入下一级节点的问题
void C树形显示文件夹Dlg::showtree(LPWSTR path,HTREEITEM hParent)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError;
CString str;
HTREEITEM TreeName;
SetCurrentDirectory (path);
hFind = FindFirstFile(_T("*.*"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
str.Format(L"Error:%d",GetLastError());
AfxMessageBox(str);
}
else
{
while (FindNextFile(hFind, &FindFileData) != 0)
{
if (FindFileData.cFileName[0] != '.'&&FindFileData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
//这里实在是很怪异, 之前试验了几次都不行, 包括
//FindFileData.cFileName==_T(".")都不行, 在网页上找了一个copy过来,
//居然就行了...
//rp问题真是很汗啊
{
TreeName = m_MyTreeCtrl.InsertItem (FindFileData.cFileName,hParent);
showtree(FindFileData.cFileName,TreeName);//递归调用函数, 巧妙的进入下一级
}
}
dwError = GetLastError();
//下面这句话用来返回上一层目录
//原来没有这句话, 只能显示第一个文件夹里的子文件
//想了好久才想出来是因为进入子文件夹没有返回
_chdir("..");
FindClose(hFind);
if(dwError!=ERROR_NO_MORE_FILES)
{
str.Format(L"error:%d",dwError);
AfxMessageBox(str);
}
}
}以前写的, 自己也懒得看了...你挑着有用的瞅瞅吧