参考了MSDN中的SHBrowseForFolder,我填充了BROWSEINFO结构,但是却不能显示选择文件夹的对话框,还望哪位高手给我举个例子,谢谢!

解决方案 »

  1.   

    CString Browse()
    {
    BROWSEINFO bi;  
    char dispname[MAX_PATH], path[MAX_PATH];  
    ITEMIDLIST * pidl;  
    bi.hwndOwner = 0;  
    bi.pidlRoot = 0;  
    bi.pszDisplayName = dispname;  
    bi.lpszTitle = "请选择文件夹";  
    bi.ulFlags = BIF_RETURNONLYFSDIRS;  
    bi.lpfn = 0;  
    bi.lParam = 0;  
    bi.iImage = 0;  
    //弹出文件夹浏览窗口,并选取目录
    if (pidl = SHBrowseForFolder(&bi)) 
    {  
    SHGetPathFromIDList(pidl, path);  
    return path;
    }
    return "";
    }
      

  2.   

    我以前也遇到过
    好像是没有促使化
    BROWSEINF m_BrowInfo的变量
    加memset(&m_BrowInfo, '\0', sizeof(BROWSEINFO));
    试试看
      

  3.   

    CString Cselectfile::getdetailpath()
    {
    char szOutput[300]="\0";
        m_strAviFile="";
    bi.hwndOwner=NULL; 
    bi.pidlRoot=NULL; 
    bi.pszDisplayName=szOutput; 
    //bi.pszDisplayName="G:";

    bi.lpszTitle=_T("请选择路径:");
    bi.ulFlags=BIF_RETURNONLYFSDIRS; 
    bi.lpfn=NULL; 
    bi.lParam=0; 
    bi.iImage=0; 

    pidl=SHBrowseForFolder(&bi);

    if(pidl==NULL)
    {
    szOutput[0]=0;
    m_strAviFile = "";
    return "选择路径出现错误!";
    }
    else
    {
    if(!SHGetPathFromIDList(pidl, szOutput))
    szOutput[0] = 0;
    else
    m_strAviFile = CString(szOutput); //获得路径
    }

    int iLen = m_strAviFile.GetLength();
    if (m_strAviFile.GetAt(iLen-1) == '\\')
    m_strAviFile.Delete(iLen-1 ,1);
    return m_strAviFile;
    }
      

  4.   

    CString m_strPath;
    BROWSEINFO bi;  
    char       dispname[MAX_PATH], path[MAX_PATH]; 
    ITEMIDLIST * pidl;  
    bi.hwndOwner      = 0;  
    bi.pidlRoot       = 0;  
    bi.pszDisplayName = dispname;  
    bi.lpszTitle      = "Please Selcet The Folder";  
    bi.ulFlags        = BIF_RETURNONLYFSDIRS;  
           //bi.ulFlags        =  0X0040;  
    bi.lpfn           = 0;  
    bi.lParam         = 0;  
    bi.iImage         = 0;  

    if ((pidl = SHBrowseForFolder(&bi)) != NULL){  
    if( SHGetPathFromIDList(pidl, path) == TRUE ){
    m_strPath = path ;
              }
    }