用 CFileDialog 只能选择文件,不能选择文件夹。
还有别的方法吗?

解决方案 »

  1.   

    给对话框上放置一个按钮,把它的caption属性设成“...”,然后相应按下按钮的事件:写入下面代码,就可以让用户选择文件夹了:
             TCHAR szPath[MAX_PATH];
    LPITEMIDLIST pitem;
    BROWSEINFO info;
    ::ZeroMemory(&info,sizeof(info));
    info.hwndOwner=this->m_hWnd;
    info.lpszTitle=_T("Choose the Folder:");
    info.ulFlags=BIF_EDITBOX; if(pitem=::SHBrowseForFolder(&info)) 
    {
    ::SHGetPathFromIDList(pitem,szPath);
    UpdateData(FALSE);
    }
    m_strPath = szPath;
    szpath就是得到的目录(文件夹)路径了。
      

  2.   

    ITEMIDLIST *itemlist = NULL;
    char szPath[MAX_PATH] = {0};
    char szBuffer[MAX_PATH] = {0}; if(this->m_pBrowseSource != NULL)
    {
    // return;
    } this->m_pBrowseSource = new BROWSEINFO();
    ZeroMemory(this->m_pBrowseSource,sizeof(BROWSEINFO));
    this->m_pBrowseSource->hwndOwner = this->GetSafeHwnd();
    this->m_pBrowseSource->pidlRoot = NULL;
    this->m_pBrowseSource->pszDisplayName = szBuffer;
    this->m_pBrowseSource->lpszTitle = _T("请选择录音文件的目录:");
    this->m_pBrowseSource->ulFlags   = BIF_RETURNONLYFSDIRS;
    this->m_pBrowseSource->lpfn = NULL;
    this->m_pBrowseSource->lParam = 0;
    //this->m_pBrowseSource->ulFlags   = 0&;
    itemlist = ::SHBrowseForFolder(this->m_pBrowseSource);
    SHGetPathFromIDList(itemlist,szPath);

    if(this->m_pBrowseSource != NULL)
    {
    delete this->m_pBrowseSource;
    this->m_pBrowseSource = NULL;
    } if(strlen(szPath) > 1)
    {
    this->m_DirSource.Format("%s",szPath);
    this->UpdateData(FALSE);
    }