static BOOL CMyHelper::BrowseFolderDialog(
LPTSTR lpszPath, LPCTSTR lpszTitle , HANDLE hDlg = NULL, LPTSTR lpszRoot = NULL,BFFCALLBACK pCallBackFun = NULL);
BOOL CMyHelper::BrowseFolderDialog( LPTSTR lpszPath, LPCTSTR lpszTitle , HANDLE hDlg , LPTSTR lpszRoot ,BFFCALLBACK pCallBackFun )
{
BOOL bRet;
LPITEMIDLIST lpil;
BROWSEINFO bi;
bi.hwndOwner=(HWND) hDlg;
// 准备root
LPITEMIDLIST pidlRoot = NULL;
if (NULL != lpszRoot)
{
IShellFolder *ppshf;
SHGetDesktopFolder(&ppshf);
if(!ppshf)
{
return FALSE;
}
ppshf->ParseDisplayName((HWND)hDlg, NULL, lpszRoot, NULL, &pidlRoot, NULL); // 将根目录名字转换成定义的类型
if(!pidlRoot)
{
return FALSE;
}
}
bi.pidlRoot = pidlRoot;
bi.pszDisplayName = lpszPath;//szPath;
bi.lpszTitle = lpszTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE ;
bi.lpfn = pCallBackFun;
bi.lParam = (LPARAM)lpszPath;
lpil = SHBrowseForFolder(&bi);
if(lpil == NULL)
return FALSE;
bRet = SHGetPathFromIDList(lpil, lpszPath);
CoTaskMemFree(lpil);
//
分析路径
//
TCHAR szDrive[MAX_PATH], szDir[MAX_PATH], szFile[MAX_PATH], szExt[MAX_PATH];
//
_tsplitpath(lpszPath, szDrive, szDir, szFile, szExt);
return bRet;
}
转载于:https://blog.51cto.com/wellwy/491997