16,472
社区成员
发帖
与我相关
我的任务
分享
// 优先尝试该方法,Vista 或之后的系统支持。
IFileDialog *pifd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileDialog, (void **)&pifd);
if (hr == S_OK)
{
hr = pifd->SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST);
if (hr == S_OK)
{
hr = pifd->Show(hwndDlg);
if (hr == S_OK)
{
IShellItem *pishi = NULL;
hr = pifd->GetResult(&pishi);
if (hr == S_OK)
{
WCHAR *pszFile = NULL;
hr = pishi->GetDisplayName(SIGDN_FILESYSPATH, &pszFile);
if (hr == S_OK)
{
SetDlgItemTextW(hwndDlg, IDC_FOLDER, pszFile);
CoTaskMemFree(pszFile);
}
pishi->Release();
}
}
}
pifd->Release();
}
else
{
// 尝试传统文件夹选择控件
BROWSEINFO bi = { 0 };
bi.hwndOwner = hwndDlg;
bi.lpszTitle = TEXT("请选择文件保存位置:");
bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl != NULL)
{
TCHAR szPath[MAX_PATH] = { 0 };
if (SHGetPathFromIDList(pidl, szPath))
{
SetDlgItemText(hwndDlg, IDC_FOLDER, szPath);
}
CoTaskMemFree(pidl);
}
}
BROWSEINFO bi;
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.pszDisplayName=NULL;
bi.lpszTitle=NULL;
bi.ulFlags=0;
bi.lpfn =NULL;
bi.iImage =0;
LPCITEMIDLIST pidl=SHBrowseForFolder(&bi);
if(!pidl)
return;
TCHAR szDisplayName[255];
SHGetPathFromIDList(pidl,szDisplayName);
CString str(szDisplayName);
最后的str就是选择的目录