我在自学c++,还是菜鸟,我现在用SHBrowseForFolde调用浏览文件夹对话框,并能把路径存在savepath2中。如果我想在这基础上增加“新建文件夹”功能,并返回路径,以下代码该作哪些改动?如果要在其他地方改动,希望能说具体一点,因为我是菜鸟。听网上说增加一个参数就可以,可是我看了一些代码好复杂,弄了半天都没弄懂。,谢谢各位了!void CMyDlg::OnOK() 
{
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));//指定存放文件的默认文件夹路径
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//以默认路径打开浏览文件夹对话框
TCHAR * savepath = new TCHAR[MAX_PATH]; 
CString savepath2="";
if(pidl != NULL)
{
SHGetPathFromIDList(pidl,savepath);//把文件夹路径存放在savepath中 
savepath2.Format(_T("%s"),savepath);
savepath2=savepath2+"\\";//在路径后增加斜杠
if(SUCCEEDED(SHGetMalloc(&pMalloc)))//网上说pidl指向的对象用完应该释放
{
pMalloc->Free(pidl);
pMalloc->Release();

}
MessageBox(savepath2);//显示所选文件夹路径
}

解决方案 »

  1.   

    http://www.codeproject.com/dialog/cfolderdialog.asp用这个类就可以了    
      

  2.   

    我想在SHBrowseForFolde基础上进行改进啊,Ryanwen提供的是CFolderDialog,下载不知道怎么用,谢谢。
      

  3.   

    BROWSEINFO bi; 
    ZeroMemory(&bi,sizeof(BROWSEINFO));//指定存放文件的默认文件夹路径 
    bi.ulFlags = BIF_NEWDIALOGSTYLE;
    LPMALLOC pMalloc; 
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//以默认路径打开浏览文件夹对话框 
      

  4.   

    谢谢,但编译提示了错误:
    error C2065: 'BIF_NEWDIALOGSTYLE' : undeclared identifier
      

  5.   

    CString CXXXDlg::GetDirectoryPath()
    {
    CString strPath;
    CFolderDialog* pFolderDlg = NULL;
    LPCTSTR lpszTitle = _T( "选择文件夹" );
    UINT uFlags   = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; pFolderDlg = new CFolderDialog( lpszTitle, NULL, this, uFlags); if( pFolderDlg != NULL )
    {
    pFolderDlg->SetRootFolder( NULL ); if( pFolderDlg->DoModal() == IDOK )
    {
    strPath = pFolderDlg->GetFolderPath();
    if(!strPath.IsEmpty())
    strPath += "\\";
    } if( pFolderDlg )

    delete pFolderDlg; 
    pFolderDlg = NULL;
    }
    } return strPath;
    }
      

  6.   

    那你直接写bi.ulFlags = 0x40;
      

  7.   

    是的, 直接写bi.ulFlags = 0x0040;BROWSEINFO bi;
    char szPathName[MAX_PATH];
    char szTitle[] = "选择路径";
    ZeroMemory(&bi, sizeof(BROWSEINFO));
    bi.hwndOwner = GetSafeHwnd();
    bi.pszDisplayName = szPathName;
    bi.lpszTitle = szTitle;
    bi.ulFlags = 0x0040 ; 
    CString str;
      LPITEMIDLIST idl = SHBrowseForFolder(&bi);
    if(idl == NULL)
    {
    ExportParantDir= "";
    return;
    }
    SHGetPathFromIDList(idl, str.GetBuffer(MAX_PATH * 2));
    str.ReleaseBuffer();
    if(str != "" && str.GetAt(str.GetLength() - 1) != '\\')
    str += "\\";
      

  8.   

    我在网上找到了解决方法,就是在头文件那里先定义#define BIF_NEWDIALOGSTYLE 0x00000040
    然后再写代码bi.ulFlags = BIF_NEWDIALOGSTYLE;后来我再试bi.ulFlags = 0x40;也行。谢谢大家。