工做總結:文件對話框的分類(C++)

原文地址:http://www.jizhuomi.com/software/173.htmlhtml

文件對話框分爲打開文件對話框和保存文件對話框,相信你們在Windows系統中常常見到這兩種文件對話框。例如,不少編輯軟件像記事本等都有「打開」選項,選擇「打開」後會彈出一個對話框,讓咱們選擇要打開文件的路徑,這個對話框就是打開文件對話框;除了「打開」選項通常還會有「另存爲」選項,選擇「另存爲」後每每也會有一個對話框彈出,讓咱們選擇保存路徑,這就是保存文件對話框。編程

       正如上面舉例說明的,打開文件對話框用於選擇要打開的文件的路徑,保存文件對話框用來選擇要保存的文件的路徑。函數

       文件對話框類CFileDialogthis

      MFC使用文件對話框類CFileDialog封裝了對文件對話框的操做。CFileDialog類的構造函數原型以下:spa

explicit CFileDialog(    BOOL bOpenFileDialog,    LPCTSTR lpszDefExt = NULL,    LPCTSTR lpszFileName = NULL,    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,    LPCTSTR lpszFilter = NULL,    CWnd* pParentWnd = NULL,    DWORD dwSize = 0,    BOOL bVistaStyle = TRUE );操作系統

       參數說明:指針

       bOpenFileDialog:指定要建立的文件對話框的類型。設爲TRUE將建立打開文件對話框,不然將建立保存文件對話框。code

       lpszDefExt:默認的文件擴展名。若是用戶在文件名編輯框中沒有輸入擴展名,則由lpszDefExt指定的擴展名將被自動添加到文件名後。默認爲NULL。htm

       lpszFileName:文件名編輯框中顯示的初始文件名。若是爲NULL,則不顯示初始文件名。blog

       dwFlags:文件對話框的屬性,能夠是一個值也能夠是多個值的組合。關於屬性值的定義,能夠在MSDN中查找結構體OPENFILENAME,元素Flags的說明中包含了全部屬性值。默認爲OFN_HIDEREADONLY和OFN_OVERWRITEPROMPT的組合,OFN_HIDEREADONLY表示隱藏文件對話框上的「Read Only」複選框,OFN_OVERWRITEPROMPT表示在保存文件對話框中若是你選擇的文件存在了,就彈出一個消息對話框,要求肯定是否要覆蓋此文件。

       lpszFilter:文件過濾器,它是由若干字符串對組成的一個字符串序列。若是指定了文件過濾器,則文件對話框中只有符合過濾條件的文件顯示在文件列表中待選擇。給你們看看VS2010 MSDN中給出的一個例子:

       static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||");

       這樣設置過濾器之後,文件對話框的擴展名組合框中將有四個選項:Chart Files (*.xlc)、Worksheet Files (*.xls)、Data Files(*.xlc;*.xls)和All Files (*.*),你們能夠看到每種文件的擴展名規定都是一個字符串對,例如Chart Files的過濾字符串是Chart Files(*.xlc)和*.xlc成對出現的。

       pParentWnd:文件對話框的父窗口的指針。

       dwSize:OPENFILENAME結構體的大小。不一樣的操做系統對應不一樣的dwSize值。MFC經過此參數決定文件對話框的適當類型(例如,建立Windows 2000文件對話框仍是XP文件對話框)。默認爲0,表示MFC將根據程序運行的操做系統版原本決定使用哪一種文件對話框。

       bVistaStyle:指定文件對話框的風格,設爲TRUE則使用Vista風格的文件對話框,不然使用舊版本的文件對話框。此參數僅在Windows Vista中編譯時適用。

       文件對話框也是模態對話框,因此在打開時也須要調用CFileDialog類的DoModal()成員函數。在打開文件對話框中點了「打開」或者在保存文件對話框中點了「保存」之後,咱們可使用CFileDialog類的成員函數GetPathName()獲取選擇的文件路徑。

       下面列出幾個CFileDialog類的成員函數,咱們可使用它們得到文件對話框中的各類選擇。

GetFileExt():得到選定文件的後綴名。 GetFileName():得到選定文件的名稱,包括後綴名。 GetFileTitle():得到選定文件的標題,即不包括後綴名。 GetFolderPath():得到選定文件的目錄。 GetNextPathName():得到下一個選定的文件的路徑全名。 GetPathName():得到選定文件的路徑全名。 GetReadOnlyPref():得到是否「以只讀方式打開」。 GetStartPosition():得到文件名列表中的第一個元素的位置。

       文件對話框實例

      根據前面所講內容,雞啄米給你們作個文件對話框實例。

       1.建立一個基於對話框的MFC應用程序工程,名稱設爲「Example17」。

       2.修改主對話框IDD_EXAMPLE17_DIALOG的模板,刪除自動生成的「TODO: Place dialog controls here.」靜態文本框,添加兩個編輯框,ID分別爲IDC_OPEN_EDIT和IDC_SAVE_EDIT,再添加兩個按鈕,ID分別設爲IDC_OPEN_BUTTON和IDC_SAVE_BUTTON,Caption分別設爲「打開」和「保存」。按鈕IDC_OPEN_BUTTON用於顯示打開文件對話框,編輯框IDC_OPEN_EDIT顯示在打開文件對話框中選擇的文件路徑。按鈕IDC_SAVE_BUTTON用於顯示保存文件對話框,編輯框IDC_SAVE_BUTTON顯示在保存文件對話框中選擇的文件路徑。

       3.分別爲按鈕IDC_OPEN_BUTTON和IDC_SAVE_BUTTON添加點擊消息的消息處理函數CExample17Dlg::OnBnClickedOpenButton()和CExample17Dlg::OnBnClickedSaveButton()。

       4.修改兩個消息處理函數以下:

C++代碼
  1. void CExample17Dlg::OnBnClickedOpenButton()   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.     // 設置過濾器   
  5.     TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|全部文件(*.*)|*.*||");   
  6.     // 構造打開文件對話框   
  7.     CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this);   
  8.     CString strFilePath;   
  9.   
  10.     // 顯示打開文件對話框   
  11.     if (IDOK == fileDlg.DoModal())   
  12.     {   
  13.         // 若是點擊了文件對話框上的「打開」按鈕,則將選擇的文件路徑顯示到編輯框裏   
  14.         strFilePath = fileDlg.GetPathName();   
  15.         SetDlgItemText(IDC_OPEN_EDIT, strFilePath);   
  16.     }   
  17. }   
  18.   
  19.   
  20. void CExample17Dlg::OnBnClickedSaveButton()   
  21. {   
  22.     // TODO: Add your control notification handler code here   
  23.     // 設置過濾器   
  24.     TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|全部文件(*.*)|*.*||");   
  25.     // 構造保存文件對話框   
  26.     CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);   
  27.     CString strFilePath;   
  28.   
  29.     // 顯示保存文件對話框   
  30.     if (IDOK == fileDlg.DoModal())   
  31.     {   
  32.         // 若是點擊了文件對話框上的「保存」按鈕,則將選擇的文件路徑顯示到編輯框裏   
  33.         strFilePath = fileDlg.GetPathName();   
  34.         SetDlgItemText(IDC_SAVE_EDIT, strFilePath);   
  35.     }   
  36. }  

       上面顯示編輯框內容時,雞啄米使用了Windows API函數SetDlgItemText,固然也能夠先給編輯框關聯變量,而後再使用雞啄米在建立對話框類和添加控件變量中介紹的 CDialogEx::UpdateData()函數,可是雞啄米比較習慣使用SetDlgItemText函數,感受比較靈活。

       5.運行此程序,在結果對話框上點「打開」按鈕,顯示打開文件對話框以下:

VS2010/MFC編程入門之十七(對話框:文件對話框)

       點「保存」按鈕後,顯示保存文件對話框:

VS2010/MFC編程入門之十七(對話框:文件對話框)

       在打開文件對話框和保存文件對話框都選擇了文件路徑後,主對話框以下:

VS2010/MFC編程入門之十七(對話框:文件對話框)

       到此,文件對話框就講完了,是否是依然很簡單?若是忘記了文件對話框類構造函數的參數意義,能夠回到雞啄米來看看或者在MSDN上查閱。

相關文章
相關標籤/搜索