<MFC>打开文件和保存文件对话框

  

  文件对话框分为打开文件对话框和保存文件对话框。

  文件对话框类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_HIDEREADONLYOFN_OVERWRITEPROMPT的组合,OFN_HIDEREADONLY表示隐藏文件对话框上的“ReadOnly”复选框,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)DataFiles(*.xlc;*.xls)All Files (*.*),大家可以看到每种文件的扩展名规定都是一个字符串对,例如ChartFiles的过滤字符串是Chart Files(*.xlc)*.xlc成对出现的。

      pParentWnd:文件对话框的父窗口的指针。

       dwSizeOPENFILENAME结构体的大小。不同的操作系统对应不同的dwSize值。MFC通过此参数决定文件对话框的适当类型(例如,创建Windows 2000文件对话框还是XP文件对话框)。默认为0,表示MFC将根据程序运行的操作系统版本来决定使用哪种文件对话框。

      bVistaStyle:指定文件对话框的风格,设TRUE则使用Vista风格的文件对话框,否则使用旧版本的文件对话框。此参数仅在WindowsVista中编译时适用。

      文件对话框也是模态对话框,所以在打开时也需要调用CFileDialog类的DoModal()成员函数。在打开文件对话框中点了打开或者在保存文件对话框中点了保存以后,我们可以使用CFileDialog类的成员函数GetPathName()获取选择的文件路径。

      下面列出几个CFileDialog类的成员函数,我们可以使用它们获得文件对话框中的各种选择。

GetFileExt():获得选定文件的后缀名
GetFileName()
:获得选定文件的名称,包括后缀名。
GetFileTitle():获得选定文件的标题,即不包括后缀名。
GetFolderPath()
:获得选定文件的目录。
GetNextPathName()
:获得下一个选定的文件的路径全名。
GetPathName():获得选定文件的路径全名。
GetReadOnlyPref()
:获得是否以只读方式打开
GetStartPosition()
:获得文件名列表中的第一个元素的位置。

 

1、“打开文件”消息响应函数例子

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.     }   

 

2、“保存文件”消息响应函数例子

1. void CExample17Dlg::OnBnClickedSaveButton()  

2. {   

3.     // TODO: Add your control notification handler code here   

4.     // 设置过滤器   

5.     TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||");   

6.     // 构造保存文件对话框   

7.     CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);   

8.     CString strFilePath;  

9.   

10.         // 显示保存文件对话框   

11.         if (IDOK == fileDlg.DoModal())  

12.         {   

13.             // 如果点击了文件对话框上的保存按钮,则将选择的文件路径显示到编辑框里   

14.             strFilePath = fileDlg.GetPathName();  

15.             SetDlgItemText(IDC_SAVE_EDIT, strFilePath);  

16.         }   

17.     }  

注意:button按钮的消息响应函数应该放在button按钮所在的类.cpp中,否则不能显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值