MFC中CFileDialog的用法 如何设置文件类型
2017-04-07 11:42
330 查看
CFileDialog的用法 CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下: [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 CFileDialog::CFileDialog CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL ); 参数: bOpenFileDialg 如果为TRUE, 则创建文件打开对话框;如果为FALSE,则构造一个File Save As(另存为)对话框。 lpszDefExt 缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。如果为NULL,则不添加扩展名。 lpszFileName 初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。 dwFlags 一个或多个标志的组合,使你可定制对话框。要了解这些标志的描述,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。如果你改变m_ofn.Flags结构成员,在改变中用OR操作保持缺省行为完整。 lpszFilter 一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器,仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器。 参数格式如: "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。 pParentWnd 指向文件对话框对象的父窗口或拥有者窗口。 使用方法举例: [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 CFileDialog dlg( FALSE, "BMP", NULL, OFN_HIDEREADONLY, "image files (*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||", NULL ); 参考资料: http://blog.csdn.NET/zmq5411/article/details/6222735 这个教程很好 http://bbs.csdn.Net/topics/390189971 CFileDialog CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 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 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。 pParentWnd 为父窗口指针。 可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。每种情况下,对话框都与标准MFC对话框一样工作。因为它们都是CCommonDialog类的派生类。 要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。m_ofn结构是OPENFILENAME类型的。要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。 初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OK(IDOK)还是取消(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类的成员 继承体系 CObject └CCmdTarget └CWnd └CDialog └CCommonDialog └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:\ test\ test1.txt CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt CString CFileDialog::GetFileExt( ) 得到完整的文件扩展名,如:txt CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1 POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。 CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。 例如 { CString FilePathName; CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框 if(dlg.DoModal()==IDOK) FilePathName=dlg.GetPathName(); } 相关信息:CFileDialog 用于取文件名的几个成员函数: 假如选择的文件是C:WINDOWSTEST.EXE 则: (1)GetPathName();取文件名全称,包括完整路径。取回C:\WINDOWS\TEST.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; }
相关文章推荐
- MFC中CFileDialog的用法 如何设置文件类型
- 编程小问题系列(5) 如何在VS里设置MFC工程的线程模型
- MFC如何设置对话框的背景和字体颜色
- 如何设置MFC中EditBox为自动换行
- MFC如何用CFileDialog来打开和保存文件
- Clander的用法。如何取得当前时间一个月后/前的时间。如何取得某个月的最后一天。如何取得今年的第一个周一。五月的第二个星期日。如何取得今年的第一周(注意国外的日历和国内可能不一样,如何设置一周开始
- VC/MFC如何设置对话框背景颜色
- VC/MFC如何设置对话框背景颜色
- 文件处理函数如何使用?用法举例,C与MFC
- VC6.0下MFC中CFileDialog的文件过滤器lpstrfilter的设置
- MFC选择目录SHBrowseForFolder选择文件CFileDialog对话框设置默认路径
- MFC如何用CFileDialog来打开和保存文件
- MFC 如何设置鼠标的形状 如何设置光标热区
- MFC应用程序如何设置起始窗体
- VC/MFC如何设置对话框背景颜色
- 文件处理函数如何使用?用法举例,C与MFC
- 如何为自定义控件设置图标——ToolboxBitmap的用法
- Clander的用法。如何取得当前时间一个月后/前的时间。如何取得某个月的最后一天。 如何取得今年的第一个周一。五月的第二个星期日。 如何取得今年的第一周(注意国外的日历和国内可能不一样,如何设置一周
- VC/MFC如何设置对话框背景颜色
- 在windows/MFC编程中如何设置窗口半透明