CFileDialog 简介

CFileDialog

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

  可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。每种情况下,对话框都与标准MFC对话框一样工作。因为它们都是CCommonDialog类的派生类。

  要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。m_ofn结构是OPENFILENAME类型的。要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。

  初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OKIDOK)还是取消(IDCANCEL)按钮。

  当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。

  CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。

  可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。

  析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog

  要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal之前进行此操作。另外,必须用m_ofn.lpstrFile指向的缓冲区字节数来设置m_ofn.nMaxFile

  CFileDialog依赖于Windows3.1及以后版本中的COMMDLG.DLL

  如果从CFileDialog中派生出一个新类,可用消息映射处理。要扩展消息处理,从CWnd中派生一个类,向新类中加入一个消息映射并为新消息提供成员函数,无须提供一个钩子函数来定制对话框。

  要定制对话框,从CFileDialog中派生一个对象,提供一个定制对话模板,从扩展控件中加入一个消息映射,处理通知消息。任意未处理的消息将传递给基类。

  无须定制钩子函数。

  #include <afxdlgs.h>

  CFileDialog类的成员

  数据成员

m_ofn

Windows OPENFILENAME结构,提供对基本文件对话框参数的访问

 

  构造函数

CFileDialog

构造一个CFileDialog对象操作

DoModal

显示对话框并使用户可以进行选择

GetPathName

返回选定文件的完整路径

GetFileName

返回选定文件的文件名

GetFileExt

返回选定文件的扩展文件名

GetFileTitle

返回选定文件的标题

GetNextPathName

返回下一个选定文件的完整路径

GetReadOnlyPref

返回选定文件的只读状态

GetStartPosition

返回文件名列表的第一个元素位置

 

  可覆盖的函数

OnShareViolation

发生共享冲突时调用

OnFileNameOK

确认键入对话框中的文件名

OnLBSelChangedNotify

当列表框选择改变时调用

OnInitDone

处理WM_NOTIFY CDN_INITDONE消息

OnFileNameChange

处理WM_NOTIFY CDN_SELCHANGE消息

OnFolderChange

处理WM_NOTIFY CDN_FOLDERCHANGE消息

OnTypeChange

处理WM_NOTIFY CDN_TYPECHANGE消息

 

  文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:

  CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

  参数意义如下:

  bOpenFileDialog TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。

  lpszDefExt 指定默认的文件扩展名。

  lpszFileName 指定默认的文件名。

  dwFlags 指明一些特定风格。

  lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:

  "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

  pParentWnd 为父窗口指针。

  创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:

  CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c: est est1.txt

  CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt

  CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt

  CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1

  POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

  CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

  例如

  {

  CString

  FilePathName;

  CFileDialog dlg(TRUE);///TRUEOPEN对话框,FALSESAVE AS对话框

  if(dlg.DoModal()==IDOK)

  FilePathName=dlg.GetPathName();

  }

  相关信息:CFileDialog 用于取文件名的几个成员函数:

  假如选择的文件是C:WINDOWSTEST.EXE

  则:

  (1)GetPathName();取文件名全称,包括完整路径。取回C:WINDOWSTEST.EXE

  (2)GetFileName();取文件全名:TEST.EXE

  (3)GetFileTitle();取回TEST

  (4)GetFileExt();取扩展名EXE

  补充: 在控制台下使用这个类需要设置在静态库中使用MFC,然后构造 AfxSetResourceHandle(GetModuleHandle(NULL));

  相关头文件 #include <Afxdlgs.h>

  例:

  int main()

  {

  AfxSetResourceHandle(GetModuleHandle(NULL));

  CFileDialog filedlg(TRUE);

  if(IDOK==filedlg.DoModal())

  {

  ...

  }

  return 0;

  }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值