如何实现文件夹选择对话框?
偶写一个程序,其中一个功能是把一批选中的文件拷贝到另一个文件夹,可是以前常用的CFileDialog必须指定到文件,选择一个文件夹点保存会打开这个文件夹,虽说也可以凑合用但是怪别扭的,谁能提供一个简单的实现那种常见的文件夹选择对话框啊? 问题点数:100、回复次数:5Top
1 楼Semigod()回复于 2003-12-15 11:20:15 得分 100
给你一个函数:
CString ShowSelectDirectoryDlg(const CString & strDlgTitle)
{
char szDir[MAX_PATH];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDir;
bi.lpszTitle = strDlgTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if(pidl == NULL)
return _T("");
if(!SHGetPathFromIDList(pidl, szDir))
return _T("");
return CString(szDir);
}
Top
2 楼Tranum(万漏阁主人)回复于 2003-12-15 11:25:03 得分 0
谢谢啦,称心如意^o^Top
3 楼sinhighly(非典型程序员)回复于 2003-12-15 11:26:55 得分 0
BROWSEINFO bi;
LPITEMIDLIST pidl;
bi.hwndOwner = this->GetSafeHwnd();//
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;//DisplayName;
bi.lpszTitle = "请选择路径";
bi.ulFlags = BIF_DONTGOBELOWDOMAIN|BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;//|BIF_BROWSEINCLUDEFILES;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);
if (pidl == NULL) return;
char szPath[MAX_PATH];
SHGetPathFromIDList(pidl, szPath);
Top
4 楼byry(百事罐头)回复于 2003-12-15 11:27:26 得分 0
void CTestBrowseDlg::OnBrowse()
{
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="选择安装目录:";
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
str.ReleaseBuffer();
UpdateData(FALSE);
}Top
5 楼Tranum(万漏阁主人)回复于 2003-12-15 12:09:26 得分 0
抱歉啦,sinhighly和byry的回复结贴时没看到…………
仅对二位的热心表示谢意Top



