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;  

 
}