BROWSEINFO bi; //BROWSEINFO结构体
TCHAR szBuffer[512]="";
TCHAR szFullPath[512]="";
bi.hwndOwner = m_hWnd; //m_hWnd你的程序主窗口
bi.pidlRoot = NULL;
bi.pszDisplayName = szBuffer; //返回选择的目录名的缓冲区
bi.lpszTitle = "Selection"; //弹出的窗口的文字提示
bi.ulFlags = BIF_RETURNONLYFSDIRS ; //只返回目录。其他标志看MSDN
bi.lpfn = NULL; //回调函数,有时很有用
bi.lParam = 0;
bi.iImage = 0;
ITEMIDLIST* pidl = ::SHBrowseForFolder (&bi); //显示弹出窗口,ITEMIDLIST很重要
if(::SHGetPathFromIDList (pidl,szFullPath)) //在ITEMIDLIST中得到目录名的整个路径
{
//成功
m_strDirOfSave = szFullPath;
UpdateData(FALSE);
}
else
{
//失败
}
LPMALLOC pMalloc;
LPITEMIDLIST pidl;
TCHAR szPath [MAX_PATH]; // not used
BROWSEINFO bi = { GetSafeHwnd(), NULL, szPath,
_T("Select destination folder."),
BIF_RETURNONLYFSDIRS, NULL, NULL };
pidl = SHBrowseForFolder ( &bi );
if ( NULL != pidl )
{
if ( SHGetPathFromIDList ( pidl, szPath ) )
{
m_strDest = szPath;
UpdateData ( FALSE );
}
SHGetMalloc ( &pMalloc );
pMalloc->Free(pidl);
pMalloc->Release();
}