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;  

 
}