如题

解决方案 »

  1.   

    LPMALLOC lpMalloc;
    if(::SHGetMalloc(&lpMalloc)!=NOERROR)
    {
    AfxMessageBox("选择下载目录操作出错");
    return;
    }
    char szDisplayName[_MAX_PATH];
    char szBuffer[_MAX_PATH];
    BROWSEINFO browseInfo;
    browseInfo.hwndOwner=this->m_hWnd;
    browseInfo.pidlRoot=NULL;
    browseInfo.pszDisplayName=szDisplayName;
    browseInfo.lpszTitle="请选择下载文件的存储路径";
    browseInfo.ulFlags=BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
    browseInfo.lpfn=NULL;
    browseInfo.lParam=0;
    LPITEMIDLIST lpItemIDList;
    if((lpItemIDList=::SHBrowseForFolder(&browseInfo))!=NULL)
    {
    if(::SHGetPathFromIDList(lpItemIDList,szBuffer))
    {
    if(szBuffer[0]=='\0')
    {
    AfxMessageBox("Fail to get directory",MB_ICONSTOP|MB_OK);
    return;
    }
    DownFileDirectory=szBuffer;
    }
    else
    {
    AfxMessageBox("Fail to get directory!",MB_ICONSTOP|MB_OK);
    return;
    }
    lpMalloc->Free(lpItemIDList);
    lpMalloc->Release();
    }
    CString strMsg;
    strMsg.Format("选择目录为:%s",DownFileDirectory);
    AfxMessageBox(strMsg);
      

  2.   

    BROWSEINFO bi;
    ZeroMemory(&bi,sizeof(bi));
    SHBrowseForFolder(&bi);
      

  3.   

    CString _BrowseForFolder(HWND hwnd = NULL, LPCTSTR lpszTitle = "请选择目录")
    {
        char buf[MAX_PATH] = {0};
        BROWSEINFO bi;
        memset(&bi, 0, sizeof(BROWSEINFO));
        bi.hwndOwner = hwnd;
        bi.lpszTitle = lpszTitle;
        bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|0x0040;
        
        LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
        if(pidl)
        {
            LPMALLOC pMalloc;
            SHGetMalloc(&pMalloc);
            SHGetPathFromIDList(pidl, buf);
            pMalloc->Free(pidl);
            pMalloc->Release();
        }
        return buf;
    }