1. 程式人生 > >選擇目錄對話方塊和選擇檔案對話方塊——CFileDialog

選擇目錄對話方塊和選擇檔案對話方塊——CFileDialog

網上相關文章很多,現簡單整理如下

1、CFileDialog建構函式

1 CFileDialog:CFileDialog(BOOL     bOpenFileDialog,
2 LPCTSTR     lpszDefExt=NULL,
3 LPCTSTR     lpszFileName=NULL,
4 DWORD     dwFlags     =     OFN_HIDEREADONLY     |     OFN_OVERWRITEPROMPT,
5 LPCTSTR     lpszFilter=NULL,
6 CWnd     *     pParentWnd=NULL);

bOpenFileDialog:TRUE為開啟檔案對話方塊;FALSE為儲存檔案對話方塊

lpszDefExt:預設的副檔名

lpszFileName:預設顯示在檔名組合框的編輯框的檔名,一般可選NULL

dwFlags:對話方塊風格,一般為OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隱藏只讀選項和覆蓋已有檔案前提示。

型別:

    OFN_HIDEREADONLY:隱藏只讀選項

    OFN_OVERWRITEPROMPT:覆蓋已有檔案前提

    OFN_ALLOWMULTISELECT:允許選擇多個檔案

    OFN_CREATEPROMPT:

如果輸入的檔名不存在,則對話方塊返回詢問使用者是否根據次檔名建立檔案的訊息框

    OFN_FILEMUSTEXIST:只能輸入已存在的檔名

    OFN_FORCESHOWHIDDEN:可以顯示隱藏的檔案

    OFN_NOREADONLYRETURN:不返回只讀檔案

   OFN_OVERWRITEPROMPT:儲存的檔案已存在時,顯示檔案已存在的資訊

lpszFilter:檔案篩選型別,它指明可供選擇的檔案型別和相應的副檔名。引數格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";檔案型別說明和副檔名間用 | 分隔,同種型別檔案的副檔名間可以用 ; 分割,每種檔案型別間用 | 分隔,末尾用 || 指明。

pParentWnd:父視窗指標,一般可選NULL.

2、對話方塊選項常用屬性(例項:dialog)

dialog.m_ofn.lpstrTitle:顯示視窗標題。

dialog.m_ofn.lpstrInitialDir:初始化展開路徑。

dlg.m_ofn.lpstrFile:預設檔案

dlg.m_ofn.lpstrFilter:檔案篩選型別,注意與lpszFilter區別,要用"\0",不能用"|"

如:dlg.m_ofn.lpstrFilter="所有檔案\0*.*\0影象檔案\0*.jpg;*.bmp;*.gif\0\0";

3、對話方塊常用方法

INT_PTR CFileDialog::DoModal() 顯示檔案操作對話方塊,常用返回值:IDOK,點選了開啟確定操作 IDCANCEL,取消 

CString CFileDialog::GetPathName( ) 得到完整的檔名,包括目錄名和副檔名 如:c:\test\test.txt。注,多檔案選擇時返回目錄名

CString CFileDialog::GetFileName( ) 得到完整的檔名,包括副檔名如:test.txt

CString CFileDialog::GetExtName( ) 得到完整的副檔名,如:txt

CString CFileDialog::GetFileTitle ( ) 得到完整的檔名,不包括目錄名和副檔名如:test

POSITION CFileDialog::GetStartPosition( ) 對於選擇了多個檔案的情況得到第一個檔案位置。

CString CFileDialog::GetNextPathName( POSITION& pos ) 對於選擇了多個檔案的情況得到下一個檔案位置,並同時返回當前檔名。但必須已經呼叫過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變數。

4、示例——多檔案開啟操作,獲取檔名以“;”分開

01 //本程式碼測試環境VS2008 c++ MFC
02 CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
03 NULL, this);
04
05 dlg.m_ofn.lpstrInitialDir = (BSTR)directoryName;  //設定對話方塊預設呈現的路徑
06
07 CString strFilePath;
08 if(dlg.DoModal() == IDOK)
09 {
10 CArray<CString, CString> aryFilename;
11 POSITION posFile=dlg.GetStartPosition();
12 while(posFile!=NULL)
13 {
14 aryFilename.Add(dlg.GetNextPathName(posFile));
15 }
16 for(int i=0;i<aryFilename.GetSize();i++)
17 {
18 if(strFilePath.GetLength()>0)
19 {
20 strFilePath.AppendChar(';');//多個檔案‘;’分開
21 }
22 strFilePath+= aryFilename.GetAt(i);
23 }
24 }

在MFC程式設計中經常會需要用到選擇目錄和選擇檔案的介面,以下總結一下本人常用的這兩種對話方塊的生成方法:

選擇目錄對話方塊

//選擇目錄按鈕
void CDcPackerDlg::OnBnClickedDecgen()    
{
    
char szPath[MAX_PATH];     //存放選擇的目錄路徑 
    CString str;

    ZeroMemory(szPath, 
sizeof(szPath));   

    BROWSEINFO bi;   
    bi.hwndOwner 
= m_hWnd;   
    bi.pidlRoot 
= NULL;   
    bi.pszDisplayName 
= szPath;   
    bi.lpszTitle 
="請選擇需要打包的目錄:";   
    bi.ulFlags 
=0;   
    bi.lpfn 
= NULL;   
    bi.lParam 
=0;   
    bi.iImage 
=0;   
    
//彈出選擇目錄對話方塊
    LPITEMIDLIST lp = SHBrowseForFolder(&bi);   

    
if(lp && SHGetPathFromIDList(lp, szPath))   
    
{
        str.Format(
"選擇的目錄為 %s",  szPath);
        AfxMessageBox(str); 

        
    }

    
else   
        AfxMessageBox(
"無效的目錄,請重新選擇");   
}


選擇檔案對話方塊

CString CDcPackerDlg::BootOpenDialog()   //返回選擇的檔名稱
{
    CString strFile 
= _T("");

    CFileDialog    dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T(
"Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);

    
if (dlgFile.DoModal())
    
{
        strFile 
= dlgFile.GetPathName();
    }


    
return strFile;
}


//載入檔案按鈕
void CDcPackerDlg::OnBnClickedSelectdec()
{
    
// TODO: Add your control notification handler code here
    m_strDescPath ="";        //類的成員變數

    
//"開啟檔案"對話方塊,選擇檔案,返回其路徑
    m_strDescPath = BootOpenDialog();

    
}

相關推薦

Qt中開啟檔案對話方塊儲存檔案對話方塊

主要是用QFileDialog的兩個靜態方法 1、開啟對話方塊 QString getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QStr

選擇目錄對話方塊選擇檔案對話方塊——CFileDialog

網上相關文章很多,現簡單整理如下 1、CFileDialog建構函式 1 CFileDialog:CFileDialog(BOOL     bOpenFileDialog, 2 LPCTSTR     lpszDefExt=NULL, 3 LPCTSTR

VBA自動點選IE的瀏覽按鈕、自動選擇路徑、自動關閉開啟檔案對話方塊

VBA呼叫InternetExplorer操作IE瀏覽器,自動彈出檔案選擇對話方塊時,VBA會處於阻塞狀態,你必須手工關閉檔案選擇對話方塊,VBA才能繼續向後執行。 例如下面網址,就有一個檔案瀏覽按鈕: http://www.zytxs.com/web1/upload.aspx 我做了一個exe檔案,可

Windows--MFC選擇文件對話選擇文件夾對話

pan -- amp grep rom on() urn posit task 選擇單個文件對話框: 1 CString strFile = _T(""); 2 3 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREA

QT開啟儲存檔案對話方塊

使用QFileDialog可以呼叫當前系統的檔案對話方塊 包含標頭檔案: #include <QFileDialog> (1)檔案開啟對話方塊 QString getOpenFile

VC++中開啟檔案儲存檔案對話方塊的呼叫

The size of the OPENFILENAME structure. This value is dependent on the operating system version, so MFC can determine the appropriate kind of dialog to cre

Qt入門-開啟儲存檔案對話方塊

使用QFileDialog可以方便地呼叫當前系統的檔案對話方塊: (1)檔案開啟對話方塊 QString getOpenFileName ( QWidget * parent = 0, const Q

開啟儲存檔案對話方塊 呼叫動態庫

//將編輯框的資料儲存到指定檔案 void CFileDialogDlg::OnBnClickedButton10() { // TODO: Add your control notification handler code here // 設定過濾器

模式對話方塊非模式對話方塊、accept()函式、exec()函式,Accepted訊號區別

一.非模式對話方塊   非模式對話方塊是和同一個程式中其它視窗操作無關的對話方塊。在字處理軟體中查詢和替換對話方塊通常是非模式的來允許同時與應用程式主視窗和對話方塊進行互動。呼叫show()來顯示非模式對話方塊。show()立即返回,這樣呼叫程式碼中的控制流將會繼續。   非模式

支援選擇檔案目錄(可多選)的檔案對話方塊CSelectDialog

MFC自帶的CFileDialog不支援選擇目錄,而且多選檔案配置也不方便。有一些實現比較好的目錄選擇對話方塊,但是既可以支援選擇檔案,又可以支援選擇目錄的非常難得。非常感謝Hojjat Bohlooli([email protected])的工作,給我們提供了一

C# winform 窗體彈出選擇目錄檔案對話方塊

privatevoid btnSelectPath_Click(object sender, EventArgs e) //彈出一個選擇目錄的對話方塊 { FolderBrowserDialog path = new FolderBrowserDialog(); path.Show

WPF選擇檔案資料夾對話方塊

WPF提供了選擇檔案對話方塊,但並沒有提供選擇資料夾的對話方塊。 OpenFileDialog類存在於PresentationFramework.dll程式集。 1 public string SelectFileWpf() 2 { 3 var open

vs2010MFC選擇檔案對話方塊選擇目錄對話方塊

選擇檔案對話方塊: 第四個引數 dwFlags為對話方塊風格,一般為OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隱藏只讀選項和覆蓋已有檔案前提示。 TCHAR szFilter[] = _T("jpg(*.jpg)|*.jpg|bm

QFileDialog關於選擇檔案對話方塊中的幾個訊號的說明(currentChanged,directoryEntered,fileSelected,filterSelected)

QFileDialog關於選擇檔案對話方塊中的幾個訊號 例項: openFile::openFile(QWidget *parent) :QWidget(parent),ui(new Ui::openFile){ui->setupUi(this);fDialog = new QFileDialog(t

MFC 下檔案對話方塊選擇多個檔案

在檔案對話方塊下,選擇多個檔案,並且得到檔名,程式碼如下: CFileDialog   Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLO

VC++選擇檔案對話方塊實現

char szFilter[] = {"All Files(*.*)|*.*||"}; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL); if

第16週週四:GUI程式設計及檔案對話方塊的使用 專案一:檔案選擇

import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.

MFC開啟檔案對話方塊選擇多個檔案

    size_t index;     CString cstrsucstring;     CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMUL

QT選擇檔案對話方塊實現多種型別檔案匹配過濾

這個功能確實不知道如何說,就是說在選擇檔案的時候是可以篩選的,但是我有時候要篩選的是音樂,有時候是圖片,這個時候就要用到這個功能了。 其實也只是很簡單的程式碼,可是很實用。程式碼如下: QString

開啟選擇檔案對話方塊時指定初始選擇路徑

 int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { if (uMsg == BFFM_INITIALI