FileDialog类可以实现打开文件对话框的功能,现在想类似的打开一个文件夹,就是把FileDialog中的选择文件改成选择文件夹,这样好实现么,是不是改下参数就可以了?

解决方案 »

  1.   

    自己做一个类,或者干脆就用CFileDialog派生一个新类好了。
      

  2.   


    LPBROWSEINFO lpbi=new BROWSEINFO;
    lpbi->hwndOwner=GetSafeHwnd();//NULL;
    lpbi->pidlRoot=NULL;
    lpbi->pszDisplayName=NULL;
    lpbi->lpszTitle="Save as:";
    lpbi->ulFlags=BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT|BIF_BROWSEINCLUDEFILES;
    lpbi->lpfn=NULL;

        LPITEMIDLIST lpitemidlist=SHBrowseForFolder(lpbi); 
    if(lpitemidlist==NULL)
    {
    delete lpbi;
    lpbi = NULL;
    return;
    }
    SHGetPathFromIDList(lpitemidlist,target_path);
    delete lpbi;
      

  3.   

    SHBrowseForFolder,MSDN里面就有例子。
      

  4.   

    修改参数filter就行,改成   "文件夹|*. ||"   
      

  5.   

    void OnBnClickedButtonSelectFolder()
    {
    // TODO: Add your control notification handler code here
    CString sFolderName;
    GetDlgItemText(IDC_EDIT_FOLDER_PAGE1, sFolderName); char cDisplayName[MAX_PATH];
    BROWSEINFO BSInfo;
    BSInfo.hwndOwner = GetSafeHwnd();
    BSInfo.pidlRoot = NULL;
    BSInfo.lpszTitle = _T("Choose path dialog...");
    BSInfo.pszDisplayName = cDisplayName;
    BSInfo.ulFlags = NULL;
    BSInfo.lpfn = NULL;
    BSInfo.lParam = (LPARAM)sFolderName.GetBuffer();
    BSInfo.iImage = 0;
    LPCITEMIDLIST lpList;
    OleInitialize(NULL);
    if ((lpList = SHBrowseForFolder(&BSInfo)) && SHGetPathFromIDList(lpList, cDisplayName))
    {
    sFolderName.Format(_T("%s"), cDisplayName);
    SetDlgItemText(IDC_EDIT_FOLDER_PAGE1, sFolderName);
    //GetFilesProperty(sFolderName);
    }
    }