日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

工作总结:文件对话框的分类(C++)

發布時間:2023/12/1 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工作总结:文件对话框的分类(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++代碼
  • void?CExample17Dlg::OnBnClickedOpenButton() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here ??
  • ????//?設置過濾器 ??
  • ????TCHAR?szFilter[]?=?_T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"); ??
  • ????//?構造打開文件對話框 ??
  • ????CFileDialog?fileDlg(TRUE,?_T("txt"),?NULL,?0,?szFilter,?this); ??
  • ????CString?strFilePath; ??
  • ??
  • ????//?顯示打開文件對話框 ??
  • ????if?(IDOK?==?fileDlg.DoModal()) ??
  • ????{ ??
  • ????????//?如果點擊了文件對話框上的“打開”按鈕,則將選擇的文件路徑顯示到編輯框里 ??
  • ????????strFilePath?=?fileDlg.GetPathName(); ??
  • ????????SetDlgItemText(IDC_OPEN_EDIT,?strFilePath); ??
  • ????} ??
  • } ??
  • ??
  • ??
  • void?CExample17Dlg::OnBnClickedSaveButton() ??
  • { ??
  • ????//?TODO:?Add?your?control?notification?handler?code?here ??
  • ????//?設置過濾器 ??
  • ????TCHAR?szFilter[]?=?_T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||"); ??
  • ????//?構造保存文件對話框 ??
  • ????CFileDialog?fileDlg(FALSE,?_T("doc"),?_T("my"),?OFN_HIDEREADONLY?|?OFN_OVERWRITEPROMPT,?szFilter,?this); ??
  • ????CString?strFilePath; ??
  • ??
  • ????//?顯示保存文件對話框 ??
  • ????if?(IDOK?==?fileDlg.DoModal()) ??
  • ????{ ??
  • ????????//?如果點擊了文件對話框上的“保存”按鈕,則將選擇的文件路徑顯示到編輯框里 ??
  • ????????strFilePath?=?fileDlg.GetPathName(); ??
  • ????????SetDlgItemText(IDC_SAVE_EDIT,?strFilePath); ??
  • ????} ??
  • }??
  • ???????上面顯示編輯框內容時,雞啄米使用了Windows API函數SetDlgItemText,當然也可以先給編輯框關聯變量,然后再使用雞啄米在創建對話框類和添加控件變量中介紹的 CDialogEx::UpdateData()函數,但是雞啄米比較習慣使用SetDlgItemText函數,感覺比較靈活。

    ?????? 5.運行此程序,在結果對話框上點“打開”按鈕,顯示打開文件對話框如下:

    ???????點“保存”按鈕后,顯示保存文件對話框:

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

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

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

    總結

    以上是生活随笔為你收集整理的工作总结:文件对话框的分类(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。