原文地址: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. if (IDOK == fileDlg.DoModal())
  11. {
  12. // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
  13. strFilePath = fileDlg.GetPathName();
  14. SetDlgItemText(IDC_OPEN_EDIT, strFilePath);
  15. }
  16. }
  17. void CExample17Dlg::OnBnClickedSaveButton()
  18. {
  19. // TODO: Add your control notification handler code here
  20. // 设置过滤器
  21. TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||");
  22. // 构造保存文件对话框
  23. CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
  24. CString strFilePath;
  25. // 显示保存文件对话框
  26. if (IDOK == fileDlg.DoModal())
  27. {
  28. // 如果点击了文件对话框上的“保存”按钮,则将选择的文件路径显示到编辑框里
  29. strFilePath = fileDlg.GetPathName();
  30. SetDlgItemText(IDC_SAVE_EDIT, strFilePath);
  31. }
  32. }

上面显示编辑框内容时,鸡啄米使用了Windows API函数SetDlgItemText,当然也可以先给编辑框关联变量,然后再使用鸡啄米在创建对话框类和添加控件变量中介绍的 CDialogEx::UpdateData()函数,但是鸡啄米比较习惯使用SetDlgItemText函数,感觉比较灵活。

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

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

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

到此,文件对话框就讲完了,是不是依然很简单?如果忘记了文件对话框类构造函数的参数意义,可以回到鸡啄米来看看或者在MSDN上查阅。

转载于:https://www.cnblogs.com/CocoWang/p/3640156.html

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

  1. VS2010/MFC编程入门之十七(对话框:文件对话框)

    上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见 ...

  2. MFC中的文件对话框类CFileDialog详解

    目录 文件对话框的分类 文件对话框类CFileDialog 对话框选项常用属性(实例:dialog) 对话框常用方法 文件对话框实例 文件对话框的分类       文件对话框分为打开文件对话框和保存文 ...

  3. 《Java程序设计》第16周周四:GUI编程及文件对话框的使用

    第一部分:实验项目  项目一:文件及选择 目的:了解文件对话框的用法,熟悉GUI中事件驱动的核心步骤. 1. 阅读博文 "JFileChooser (Java Swing提供的文件选择对话框 ...

  4. winform打开文件对话框(图片类型)-洋葱先生-杨少通

    winform打开文件对话框(图片类型) 实现功能: ①菜单的打开菜单项点击后弹出对话框. ②使用过滤器功能过滤出相应格式的图片,选择一个图片,点击打开后把所选图片显示到窗体上. ③窗体中拖拽控件:M ...

  5. Excel VBA小程序01-将多个sheet表另存为单独的工作薄文件并清除原表数据

    具体步骤: 按Alt+F11,打开VBA编辑器,在代码窗口中粘贴代码. 然后关闭VBA编辑器,返回Excel界面,然后按Alt+F8打开"宏"对话框,选择对应宏执行即可.  这四段 ...

  6. cfiledialog对话框大小_利用MFC的CFileDialog生成Windows2000文件对话框 (转)

    利用MFC的CFileDialog生成Windows2000文件对话框 (转)[@more@] 利用MFC的CFileDialog生成windows2000文件对话框 周鸣扬 自Windows2000 ...

  7. JS实现HTML上用button打开文件对话框

    JS实现HTML上用button打开文件对话框 在HTML上有一button,点这个button的话,可以弹出文件选择的对话框,用ActiveX实现的,源码如下: Code  1<HTML> ...

  8. 如何找到文件的家-打开文件对话框openFileDialog

    private void button1_Click(object sender, EventArgs e){openFileDialog1.Filter = "*.txt|*.txt&qu ...

  9. Winform控件:打开文件对话框(OpenFileDialog)

    OpenFileDialog类提供了用户打开文件的功能,它有如下属性: 属性 InitialDirectory:设置对话框的初始目录. Filter: 要在对话框中显示的文件筛选器,例如," ...

最新文章

  1. linux_tomcat
  2. spring无法用三级缓存解决循环依赖的问题分析
  3. 转: vim 的编辑格式设置
  4. Python学习笔记-基本语法
  5. 60-140-046-使用-DataSink-Flink写入到MySQL的2中方式
  6. JavaWeb-MVC模式概述
  7. dos命令集--江南技术联盟
  8. 什么是微网格?微网格规划应考虑哪些因素?
  9. linux画图工具的下载,Drawing Linux(简单画图工具)最新版下载
  10. 小程序 开发版 上传大小受限制
  11. BZOJ3110 K大数查询
  12. centos 测试get请求_centos网站服务器简单性能测试命令
  13. STM32L4超低功耗特性概述
  14. ACCEPTED: waiting for AM container to be allocated, launched and register with RM.
  15. python3电商平台论坛_2.电商平台零售数据分析
  16. 鲁宾逊微积分教材版权的“知识共享”授权方式
  17. 技术人应该广度还是深度学习?
  18. 自体验谷歌浏览器插件推荐
  19. 使用ASP.NET Core和Hangfire实现HTTP异步化方案
  20. 【问题】Ubuntu20.04桌面某些图标不显示

热门文章

  1. [单选]物联网产业链的主要产品不包括下列哪一项 - 关于物联网(主讲:柳毅)笔记...
  2. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  3. python使用telnet远程连接linux系统读取信息_Linux服务笔记之一:Telnet 远程登录
  4. CentOS 7 / RHEL 7 systemd 指令
  5. 查看linux服务器的系统信息
  6. vivox7刷linux系统,Vivo 找来宋仲基帮你送 X7
  7. windows 下安装Simplejson方法
  8. c语言三个数从小到大排序/输出_我的c语言笔记(三)
  9. mysql5.6 优点_MySQL5.6复制:GTID的优点和限制(第一部分)_MySQL
  10. 生产上oracle扩展表空间,oracle基于裸设备(raw device)扩充表空间