天天看点

MFC对话框选择多个文件及选择文件夹

本文主要介绍:MFC中,如何用对话框选择多个文件,以及如何选择文件夹(不选择文件)。

一、对话框选择多个文件

对话框的设置比较简单,只需在对话框风格中添加 OFN_ALLOWMULTISELECT即可,关键是点击确定后如何读取多个文件的路径,程序如下:

char strExt[_MAX_EXT] = "tif";//设置读取的文件类型
	CString szFilter = "GeoTiff Files (*.tif)|*.tif|All Files (*.*)|*.*||";
	CFileDialog   dlg( TRUE, strExt,NULL,OFN_FILEMUSTEXIST | OFN_HIDEREADONLY| OFN_ALLOWMULTISELECT,szFilter );
	dlg.m_ofn.lpstrTitle = _T("请选择需要处理的图像!");//设置标题
	CString inPath;
	CArray<CString, CString> aryFilename;
	if(dlg.DoModal() == IDOK)
	{
	    POSITION posFile=dlg.GetStartPosition();
	    while(posFile!=NULL)
	    {
			aryFilename.Add(dlg.GetNextPathName(posFile));
	    }
	}
	int SelFileNum = aryFilename.GetSize();//获取选择的文件数
	if(SelFileNum==0)
	{
		AfxMessageBox("没有选择需要处理的图像!");
		return 0;
	}
	
	//aryFilename.GetAt(i)  //获取第i个文件名           

二、对话框选择文件夹

有时候需要选取文件夹路径,不需要选择文件,此时用CFileDialog已经不能实现,实现程序如下:

static CString ShowDialog()  
    {  
        TCHAR           szFolderPath[MAX_PATH] = {0};  
        CString         strFolderPath = TEXT("");  
          
        BROWSEINFO      sInfo;  
        ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));  
        sInfo.pidlRoot   = 0;  
        sInfo.lpszTitle   = _T("请选择处理结果存储路径");  
        sInfo.ulFlags   = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN;  
        sInfo.lpfn     = NULL;  
  
        // 显示文件夹选择对话框  
        LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);   
        if (lpidlBrowse != NULL)  
        {  
            // 取得文件夹名  
            if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath))    
            {  
                strFolderPath = szFolderPath;  
            }  
        }  
        if(lpidlBrowse != NULL)  
        {  
            ::CoTaskMemFree(lpidlBrowse);  
        }  
  
        return strFolderPath;  
  
    }  
           

注:需要添加头文件 #include <direct.h>