zoukankan      html  css  js  c++  java
  • MFC编程入门之十七(对话框:文件对话框)

      上一讲介绍的是消息对话框,本节讲解文件对话框。文件对话框也是很常用的一类对话框。

      文件对话框的分类

      文件对话框分为打开文件对话框和保存文件对话框,相信大家在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:Palce 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_EDIT显示在保存文件对话框中选择的文件路径。

      3、分别为按钮IDC_OPEN_BUTTON和IDC_SAVE_BUTTON添加点击消息的消息处理函数CExample17Dlg::onBnClickedOpenButton()和CExample17Dlg::OnBnClickedSaveButton()。

      4、修改两个消息处理函数如下:

    C++代码:

      上面显示编辑框内容时,使用了Windows API函数SetDlgItemText,当然也可以先给编辑框关联变量,然后在使用创建对话框类和添加控件变量中介绍的CDialogEx::UpdateData()函数。

      5、运行此程序,在结果对话框上点击”打开“按钮,显示打开文件对话框如下:

      点”保存“按钮后,显示保存文件对话框:

      在打开文件对话框和保存文件对话框都选择了文件路径后,住对话框如下:

      到此,文件对话框就讲完了,如果忘记了文件对话框类构造函数的参数意义,可以在MSDN上查阅。

  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/mupiaomiao/p/6223218.html
Copyright © 2011-2022 走看看