My function:
Code:
Error BrowseForFolder(CWnd* pParentWnd, const Strings::CStringEx& strTitle, bool /*bLastFolder*/, Strings::CStringEx& strFolder, bool bEdit)
{
BROWSEINFO bi;
TCHAR Buffer[MAX_PATH];
ZeroMemory(Buffer, MAX_PATH);
ZeroMemory(&bi, sizeof(bi));
bi.hwndOwner = pParentWnd ? pParentWnd->m_hWnd : NULL;
bi.pszDisplayName = Buffer;
bi.lpszTitle = strTitle.get();
bi.ulFlags = bEdit ? BIF_EDITBOX : 0 | BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_SHAREABLE;
LPCITEMIDLIST pFolder = SHBrowseForFolder(&bi);
if (pFolder == NULL) return ERROR_CANCEL;
if (! SHGetPathFromIDList(pFolder, Buffer) ) return ERROR_BAD_PATH;
strFolder = Buffer;
return (Error)ERROR_SUCCESS;
}
Hope it makes sense and helps you.