该函数原型为:
LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO lpbi);
其中LPBROWSEINFO为BROWSEINFO结构的指针。
BROWSEINFO结构如下:
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO;
调用例子如下:
CString GetSaveFolder()
{
CString sFolderPath;
BROWSEINFO bi;
TCHAR Buffer[MAX_PATH];
LPITEMIDLIST pIDList;
LPMALLOC pMalloc;
::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (!SUCCEEDED(::SHGetMalloc(&pMalloc)))
{
return sFolderPath;
}
ZeroMemory(&bi,sizeof(bi));
//初始化入口参数bi开始
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer;
bi.lpszTitle = _T("请选择招标文件的保存路径:");
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.iImage = 0;
//初始化入口参数bi结束
pIDList= SHBrowseForFolder(&bi); //调用显示选择对话框
if(pIDList != NULL)
{
//取得文件夹路径到Buffer里
if(SHGetPathFromIDList(pIDList, Buffer))
{
sFolderPath = Buffer;
}
else
{
sFolderPath = _T("");
}
pMalloc->Free(pIDList);
}
pMalloc->Release();
return sFolderPath;
}
注意:其中BROWSEINFO的ulFlags的值设为BIF_NEWDIALOGSTYLE,可以使弹出的目录选择对话框允许用户交互,
能够添加文件夹等功能。
参考文章:VC打开目录选择对话框