文件对话框

文件对话框的分类

  文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个对话框,让我们选择要打开文件的路径,这个对话框就是打开文件对话框;除了“打开”选项一般还会有“另存为”选项,选择“另存为”后往往也会有一个对话框弹出,让我们选择保存路径,这就是保存文件对话框。

  打开文件对话框用于选择要打开的文件路径,保存文件对话框用来选择要保存文件的路径。

文件对话框类CFileDialog

  MFC使用文件对话框类CFileDialog封装了对文件对话框的操作。CFileDialog类的构造函数原型

如下:

  explicit  CFileDialog(

    BOOL  bOpenFileDialog,

    LPCTSTR lpszDefExt = NULL,

    LPCTSTR lpszFileName = NULL,

    DWORD dwFlgs = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

    LPCTSTR lpszFilter = NULL,

    CWnd *  pParentWnd = NULL,

    DWORD dwSize = 0,

    BOOL bVistaStyle = TRUE

  );

 

  参数说明:

  bOpenFileDialog:指定要创建的文件对话框的类型。设为TRUE将创建打开文件对话框,否则将创建保存文件对话框。

 

  lpszDefExt:默认的文件扩展名。如果用户在文件名编辑框中没有输入扩展名,则由lpszDefExt

指定的扩展名将被自动添加到文件名后。默认为NULL。

  lpszDefName:文件名编辑框中显示的初始文件名。如果为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()获取选择的文件路径。

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

  GetFileExt():获得选定文件的后缀名。

  GetFileName():获得选定文件的名称,包括后缀名。

  GetFileTitle():获得选定文件的标题,即不包括后缀名。

  GetFolderPath():获得选定文件的目录。

  GetNextPathName():获得下一个选定的文件的路径全名。

  GetPathName():获得选定文件的路径全名。

  GetReadOnlyPerf():获得是否“以只读方式打开”。

  GetStartPosition():获得文件名列表中的第一个元素的位置。

 

 1 void CMy03Example17Dlg::OnBnClickedOpenButton()
 2 {
 3     // TODO: 在此添加控件通知处理程序代码
 4 
 5     //设置过滤器
 6     TCHAR szfiter[] = _T("文本文件*.txt) | *.txt |所有文件(*.*)|*.*||");
 7 
 8     //构造打开文件对话框
 9     CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szfiter, this);
10     CString strFilePath;
11 
12     //显示打开文件对话框
13     if (IDOK == fileDlg.DoModal())
14     {
15         //如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
16 
17         strFilePath = fileDlg.GetPathName();
18         SetDlgItemText(IDC_OPEN_EDIT, strFilePath);
19 
20     }
21 }
22 
23 
24 void CMy03Example17Dlg::OnBnClickedSaveButton()
25 {
26     // TODO: 在此添加控件通知处理程序代码
27 
28     //设置过滤器
29     TCHAR szFilter[] = _T("文本文件(*.txt) | *.txt | word文件(*.doc) | *.doc|所有文件(*.*) | *.*||");
30 
31     //构造保存文件对话框
32     CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
33 
34     CString strFilePath;
35 
36 
37     //显示保存文件对话框
38     if (IDOK == fileDlg.DoModal())
39     {
40         //如果点击了文件对话框上的保存按钮,则将选择的文件路径显示到编辑框里
41 
42         strFilePath = fileDlg.GetPathName();
43         SetDlgItemText(IDC_SAVE_EDI2, strFilePath);
44     }

 

posted @ 2020-05-20 11:12  StudyToAll  阅读(405)  评论(0)    收藏  举报