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();
}