天天看點

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>