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

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

文件對話框分為打開文件對話框和保存文件對話框,相信大家在Windows系統中經常見到這兩種文件對話框。例如,很多編輯軟件像記事本等都有“打開”選項,選擇“打開”后會彈出一個對話框,讓我們選擇要打開文件的路徑,這個對話框就是打開文件對話框;除了“打開”選項一般還會有“另存為”選項,選擇“另存為”后往往也會有一個對話框彈出,讓我們選擇保存路徑,這就是保存文件對話框。

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

?????? 文件對話框類CFileDialog

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

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將創建打開文件對話框,否則將創建保存文件對話框。

???????lpszDefExt:默認的文件擴展名。如果用戶在文件名編輯框中沒有輸入擴展名,則由lpszDefExt指定的擴展名將被自動添加到文件名后。默認為NULL。

?????? lpszFileName:文件名編輯框中顯示的初始文件名。如果為NULL,則不顯示初始文件名。

????? ?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上查閱。

轉載于:https://www.cnblogs.com/CocoWang/p/3640156.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377162.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《MySQL——Innodb改進LRU算法》

Innodb改進LRU.算法,實質上將內存鏈表分成兩段。 靠近頭部的young和靠近末尾的old,取5/12段為分界。 新數據在一定時間內只能在old段的頭部,當在old段保持了一定的時間后被再次訪問才能升級到young。 實質上是分了兩段lru,這樣做的…

nfc/nfc模式_NFC的完整形式是什么?

nfc/nfc模式NFC:沒有進一步評論 (NFC: No Further Comment) NFC is an abbreviation of "No Further Comment". NFC是“沒有進一步評論”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking s…

dx小記(2)

1.構造一個平截臺體(Frustum) 最近距離-projMatirx.43/projMatrix.33 projMatrix。33 深度/(深度-最近距離) projMatrix。44-最近距離*(深度/(深度-最近距離)) FrustumMatrix proje…

jQuery: 整理4---創建元素和添加元素

1.創建元素&#xff1a;$("內容") const p "<p>這是一個p標簽</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(內容) -> 在指定元素的內部的最前面追加內容&#xff0c;內容可以是字符串、…

Design a high performance cache for multi-threaded environment

如何設計一個支持高并發的高性能緩存庫 不 考慮并發情況下的緩存的設計大家應該都比較清楚&#xff0c;基本上就是用map/hashmap存儲鍵值&#xff0c;然后用雙向鏈表記錄一個LRU來用于緩存的清理。這篇文章 應該是講得很清楚http://timday.bitbucket.org/lru.html。但是考慮到高…

《MySQL——join語句優化tips》

目錄要不要用joinJoin驅動表選擇Multi-Range Read優化Batched Key Access &#xff08;BKA&#xff09;對NLJ進行優化BNL算法性能問題BNL轉BKA要不要用join 1、如果使用的是Index Nested-Loop Join算法&#xff0c;即可以用上被驅動表的索引&#xff0c;可以用 2、如果使用的…

scala中抽象類_Scala中的抽象類

scala中抽象類抽象類 (Abstract Class) In the Scala programming language, abstraction is achieved using abstract class. 在Scala編程語言&#xff0c; 抽象是使用抽象類來實現的。 Abstraction is the process of showing only functionality and hiding the details fr…

不能catch Fatal的exception

Clemens Vasters - Are you catching falling knives?里給了一個判斷C#的exception是不是fatal的代碼&#xff0c;可以參考參考。 public static bool IsFatal(this Exception exception) {while (exception ! null){if (exception as OutOfMemoryException ! null &&…

HDU 2824 The Euler function

篩法計算歐拉函數 #include <iostream> #include <cstdio> using namespace std; const int maxn3000005; long long phi[maxn]; int main(){int i,j,a,b;for(i1;i<maxn;i) phi[i]i;for(i2;i<maxn;i2) phi[i]/2;for(i3;i<maxn;i2)if(phi[i]i){for(ji;j<…

LinkChecker 8.1 發布,網頁鏈接檢查

LinkChecker 8.1 可對檢查時間和最大的 URL 數量進行配置&#xff1b;當使用 HTTP 請求時發送 do-not-track 頭&#xff1b;生成 XML 的 sitemap 用于搜索引擎優化&#xff1b;檢測 URL 長度和重復的頁面內容&#xff1b;修復了很多檢查的 bug。 LinkChecker 是一個網頁鏈接檢查…

c語言語言教程0基礎_C語言基礎

c語言語言教程0基礎Hey, Folks here I am back with my second article on C language. Hope you are through with my previous article C language - History, Popularity reasons, Characteristics, Basic structure etc. In this one, I will cover some fundamental conce…

《MySQL——臨時表》

內存表與臨時表區別 臨時表&#xff0c;一般是人手動創建。 內存表&#xff0c;是mysql自動創建和銷毀的。 內存表&#xff0c;指的是使用Memory引擎的表&#xff0c;建表語法&#xff1a;create table ... engine memeory 表的數據存在內存里&#xff0c;系統重啟后會被清…

android中ActionBar的幾個屬性

actionBar.setHomeButtonEnabled //小于4.0版本的默認值為true的。但是在4.0及其以上是false&#xff0c;該方法的作用&#xff1a;決定左上角的圖標是否可以點擊。沒有向左的小圖標。 true 圖標可以點擊 false 不可以點擊。 actionBar.setDisplayHomeAsUpEnabled(true) //…

drei

模擬9 T3 &#xff08;COGS上也有&#xff0c;鏈接http://218.28.19.228/cogs/problem/problem.php?pid1428&#xff09; 題目描述 輸入a&#xff0c;p&#xff0c;求最小正整數x&#xff0c;使得a^x mod p 1。 分析 神奇的歐拉定理&#xff08;對于gcd&#xff08;a&#xf…

《MySQL——group by使用tips》

1、如果對group by語句結果沒有排序要求&#xff0c;在語句后面加order by null 2、盡量讓group by 過程用上索引&#xff0c;確認方法是explain結果里沒有Using temporary 和Using filesort 3、如果group by 需要統計的數據量不大&#xff0c;盡量只使用內存臨時表&#xff…

css中變量_CSS中的變量

css中變量CSS | 變數 (CSS | Variables) CSS variables allow you to create reusable values that can be used throughout a CSS document. CSS變量允許您創建可在CSS文檔中使用的可重用值。 In CSS variable, function var() allows CSS variables to be accessed. 在CSS變…

位圖像素的顏色 攜程編程大賽hdu

位圖像素的顏色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description 有一個在位圖上畫出矩形程序&#xff0c;一開始位圖都被初始化為白色&#xff08;RGB顏色表示…

《MySQL——InnoDB與Memory以及臨時表》

InooDB與Memory 數據組織方式不同&#xff1a; InnoDB引擎把數據放在主鍵索引上&#xff0c;其他索引上保存的是主鍵id。為索引組織表Memory引擎把數據單獨存放&#xff0c;索引上保存數據位置。為堆組織表 典型不同處&#xff1a; 1、InnoDB表的數據總是有序存放的&#x…

Oracle 用戶 profile 屬性 轉

--查看profile 內容 select * from dba_profiles where profilePF_EAGLE; --查看用戶的profiles select username,profile from dba_users; --查看是否啟用動態資源限制參數 SHOW PARAMETER RESOURCE_LIMIT; --啟用限制 ALTER SYSTEM SET RESOURCE_LIMITTRUE SCOPEBOTH; --創建…

CUL8R的完整形式是什么?

CUL8R&#xff1a;稍后再見 (CUL8R: See You Later) CUL8R is an abbreviation of "See You Later". CUL8R是“稍后見”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Yahoo M…