【精选】【MFC】 CFileDialog类 实现文件打开和文件保存(另存为) 您所在的位置:网站首页 cass怎么另存为文件 【精选】【MFC】 CFileDialog类 实现文件打开和文件保存(另存为)

【精选】【MFC】 CFileDialog类 实现文件打开和文件保存(另存为)

2023-10-25 17:42| 来源: 网络整理| 查看: 265

目录

应用场景

CFileDialog类

实例

文件打开(导入)

文件另存为

附录

dwFlags参数 相关OFN标志位

参考链接:

应用场景

在大多数常用软件中,都会发现“打开”和“另保存”的选项,以“记事本的另存为”为例,其打开对话画框的界面如下: 为了实现如上图所示的对话框界面,我们可以通过CFileDialog类来实现。

CFileDialog类

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 其构造函数如下:

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 可构造 文件打开 对话框。 将其设置为 FALSE 可构造 " 另存为 " 对话框。lpszDefExt 中默认的文件扩展名。 如果用户不包含具有用户计算机关联的已知扩展 () 在 "文件名" 框中,则由 lpszDefExt 指定的扩展将自动追加到文件名。 如果此参数为 NULL,则不追加扩展。lpszFileName 中出现在 "文件名" 框中的初始文件名。 如果为 NULL,则不会出现初始文件名。dwFlags  中可用于自定义对话框的一个或多个标志的组合。 有关这些标志的说明,请参阅 Windows SDK 中的 OPENFILENAME 结构。 如果修改 m_ofn.Flags 结构成员,请在更改中使用按位 "或" 运算符,使默认行为保持不变。lpszFilter 中一系列字符串对,用于指定可应用于文件的筛选器。 如果指定文件筛选器,文件列表中将只显示符合筛选条件的文件。 有关如何使用文件筛选器的详细信息,请参阅 "备注" 部分。pParentWnd 中指向文件对话框的父窗口或所有者窗口的指针。dwSize 中结构的大小 OPENFILENAME 。 此值取决于操作系统版本。 MFC 使用此参数来确定要创建的适当类型的对话框。 默认大小为0,这意味着 MFC 代码将根据运行程序的操作系统版本确定要使用的正确对话框大小。bVistaStyle 中 注意 此参数在 Visual Studio 2008 及更高版本中提供,并且仅当在 Windows Vista 或更高版本中运行时,才会使用新样式的对话框。

备注:

其中lpszFilter是个很重要的一个参数,想要完成文件过滤显示功能,需要对这个参数进行赋值;

其格式说明如下:

双字符串的第一个字符串描述筛选器,第二个串表明使用的文件扩展名,多重扩展可用“;”来指定。字符串由两个“|”字符结尾;

如果lpszFilter不是以默认构造形式赋值,而是通过m_ofn.lpszFilter形式赋值,我们需要将过滤器字符串中的“|”替换成”\0“;

strFilter = "dat file (*.dat)|*.dat||"; strFilter = "dat file (*.xlsx; *.xls)|*.xlsx; *.xls||"; //合为同一栏筛选 strFilter = "dat file (*.dat)|*.dat| txt file (*.txt)|*.txt||"; //两栏筛选 实例 文件打开(导入)

代码示例:

//描述:文件打开对话框 //参数: void CFile::OpenFile() { CString strFilter; CString str; CString m_strTmpFile; CStdioFile cfLogFile; //会过滤出*.txt和*.dat的文件 strFilter = "dat file (*.dat)|*.dat| txt file (*.txt)|*.txt||"; CFileDialog TmpDlg(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter.GetBuffer(), this); if (TmpDlg.DoModal() == IDOK) { //获取文件路径 m_strTmpFile = TmpDlg.GetPathName(); //打开文件 if (!cfLogFile.Open(m_strTmpFile , CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate, NULL)) { return; } //文件内容修改 CString strData = _T("测试文本内容"); cfLogFile.WriteString("\r\n"); cfLogFile.WriteString(strData); cfLogFile.SeekToEnd(); cfLogFile.Close(); } }

“打开”对话框

由于lpszDefExt和lpszFileName参数没有设置,所以“文件名”栏是没有默认文件名的。

文件另存为

代码示例:

//描述:文件另存为对话框 //参数: void CFile::OpenFile() { CString strFilter; CString str; CString m_strTmpFile; CStdioFile cfLogFile; // strFilter = "dat file (*.xlsx; *.xls)|*.xlsx; *.xls||"; CFileDialog TmpDlg(FALSE, _T("xlsx"), _T("默认文件名"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter.GetBuffer(), this); if (TmpDlg.DoModal() == IDOK) { //获取文件路径 m_strTmpFile = TmpDlg.GetPathName(); //打开文件 if (!cfLogFile.Open(m_strTmpFile , CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate, NULL)) { return; } //文件内容修改 CString strData = _T("测试文本内容"); cfLogFile.WriteString("\r\n"); cfLogFile.WriteString(strData); cfLogFile.SeekToEnd(); cfLogFile.Close(); } }

“另存为”对话框:

由于lpszDefExt和lpszFileName参数设置了默认值,所以“文件名”栏有默认的文件名和文件格式后缀。

 

附录 dwFlags参数 相关OFN标志位 OFN 标志 OFN_ALLOWMULTISELECT 指定文件名列表框允许多选。如果同时你设置了OFN_EXPLORER标记,对话框使用Explorer风格用户界面;否则它使用旧风格用户界面。OFN_CREATEPROMPT 如果用户指定了一个不存在的文件,这个标记使用对话框能提示用户是否新建这个文件。如果用户选择了新建这个文件,对话框关闭并且函数返回指定的名字;否则,对话框继续停留。如果你使用带有OFN_ALLOWMULTISELECT标记的这个标记,对话框允许用户去指定一个不存在的文件。OFN_DONTADDTORECENT Windows 2000:防止系统为选择的文件增加快捷链接到最近使用文档中。要找回目录的位置,调用还有CSIDL_RECENT标记的SHGetSpecialFolderLocation函数。OFN_ENABLEHOOK 激活在lpfnHook成员中指定的钩子函数。OFN_ENABLEINCLUDENOTIFY Windows 2000:当用户打开一个文件夹时,引起对话框发送CDN_INCLUDEITEM通知消息到你的OFNHookProc程序。对话框为在最近打开的文件夹中的每一个项目发送一个通知。这些消息使你能够控制那些在对话框中显示的文件夹项目的列表。OFN_ENABLESIZING Windows 2000,Windows 98:使Explorer风格的对话框可以使用鼠标或键盘调整大小。缺省时,Explorer风格的打开和另存为对话框允许被调整大小,不顾这个标记是否被设置。这标记仅在你提供了一个钩子程序或定制模板时是必需的。旧风格的对话框不允许调整大小。OFN_ENABLETEMPLATE 

指出lpTemplateName成员是指向对话框模板资源的名字,这个模板资源在能被hInstance成员识别的模块中。 

如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用旧风格的对话框替代默认的对话框。

OFN_ENABLETEMPLATEHANDLE 

指出hInstance成员能识别的包含预载对话框模板的数据块。如果这个标记被指定的,系统忽略lpTemplateName。

如果OFN_EXPLORER标记被设置,系统使用指定的模板去建立一个对话框,是默认Explorer风格对话框的子窗口。如果OFN_EXPLORER标记没有被设置,系统使用模板去建立一个旧风格对话框替代默认对话框。 

OFN_EXPLORER 指出任何打开或另存为对话框使用新的Explorer风格的用户化模块。关于更多的信息,参见Explorer-Style Hook Procedures和Explorer-Style Custom Templates。OFN_EXTENSIONDIFFERENT 指定用户输入的一个文件的扩展名与lpstrDefExt指定的扩展名不同。如果lpstrDefExt是NULL,函数不使用这个标记。OFN_FILEMUSTEXIST 指定用户仅可以在文件名登录字段中输入已存在的文件的名字。如果这个标记被指定的并且用户输入了一个无效的名字,对话框程序显示一个等待消息框。如果这个标记被指定,OFN_PATHMUSTEXIST标记也被使用。OFN_FORCESHOWHIDDEN Windows 2000:强制显示系统和隐藏属性的文件,从而压倒用户设置的显示或不显示隐藏文件。否则,带有系统和隐藏标记的文件不被显示。 OFN_HIDEREADONLY 隐藏只读复选框。OFN_LONGNAMES对于旧风格对话框,这个标记引起对话框使用长文件名。如果这个标记没有被指定,或如果OFN_ALLOWMULTISELECT标记也被设置,旧风格对话框为带有空格的文件名使用短文件名(8.3格式)。  Explorer风格对话框忽略这个标记,通常显示长文件名。OFN_NOCHANGEDIR 如果当搜索文件时用户改变了目录的时候,恢复当前目录到它的初始值。 OFN_NODEREFERENCELINKS 引导对话框为选择的快捷方式(.LNK)文件返回路径和文件名。如果这个值没有被指定,对话框返回这个快捷方式所引用文件的路径和文件名。OFN_NOLONGNAMES 对于旧风格对话框,这个标识引起对话框去使用短文件名(8.3格式)。  Explorer风格对话框忽略这个标记,通常显示长文件名。OFN_NONETWORKBUTTON 隐藏和显示风格按钮。OFN_NOREADONLYRETURN 指定返回的文件不带有只读复选框,不是在写保护的目录中。OFN_NOTESTFILECREATE 指定文件不是在对话框关闭前建立的。如果应用程序保存文件到一个建立的非映象风格共享上,这个标记应该被指定的。当一个应用程序指定了这标记,库不能检查写保护,磁盘满,打开驱动器门或网络保护。应用程序使用这个标记必须小心执行文件操作,因为一旦文件被关闭,它不能重新打开。OFN_NOVALIDATE 指定公共对话框允许在返回的文件名中有无效的字符。典型的,正在调用的程序使用一个钩子程序通过FILEOKSTRING消息检查文件名。如果在编辑控件中的文本框是空的或只包含了空格,那么文件和目录列表框是被更新的。如果编辑控件中的文本框包含了别的东西,那么nFileOffset和nFileExtension的设置值是通过分析文本产生的。没有默认的扩展名被添加到文本,也没有文本被复制到lpstrFileTitle指定的缓冲。    如果通过nFileOffset指定的值比0小,文件是无效的。否则,文件名是有效的。如果OFN_NOVALIDATE没有被指定,nFileExtension和nFileOffset可以被使用。OFN_OVERWRITEPROMPT 如果选择的文件已经存在,使用另存为对话框产生一个消息框。用户必须确认是否复盖这个文件。 OFN_PATHMUSTEXIST 指定用户仅能输入的路径和文件名。如果这个标记被使用并且用户在文件名输入字段中键入了一个用效的路径和文件名,对话框函数显示一个等待消息。OFN_READONLY 当对话框建立时,显示被选择的只读复选框。这个标记指出当对话框被关闭时只读复选框的状态。 OFN_SHAREAWARE 指出如果调用OpenFile函数因为网络共享冲突而失败,这个错误被忽略并且对话框返回选择的文件名。 OFN_SHOWHELP 使对话框显示帮助按钮。hwndOwner成员必须指定一个窗口,这个窗口作为接收对话框发送的HELPMSGSTRING注册的消息,当用户单击帮助按钮时对话框发送这个消息。  当用户单击帮助按钮时,一个Explorer风格的对话框发送CDN_HELP通知消息到你的钩子程序。

 

参考链接:

参考链接一:Microsoft CFileDialog

参考链接二:MFC实现文件打开和保存功能实现

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有