you can use SHBrowseForFolder. Here's am example:
char* szResult;
BROWSEINFO bi;
memset((LPVOID)&bi, 0, sizeof(bi));
TCHAR szDisplayName[_MAX_PATH+1];
szDisplayName[0] = '\0';
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = "Find folder";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pIIL = ::SHBrowseForFolder(&bi);
BOOL bRetVal = ::SHGetPathFromIDList(pIIL, szResult);
if (!bRetVal)
{
*szResult='\0';
}
LPMALLOC pMalloc;
SHGetMalloc(&pMalloc);
pMalloc->Free(pIIL);
pMalloc->Release();
Hope this helps
CMR