MFC CFileDialog类详解

文件对话框风格详解 
dwFlags 
Flags 
一组位标志,你可以用它来初始化对话框。当对话框返回,设置这些标志表明用户的输入。这个成员可以是下列标志的组合。 
OFN_ALLOWMULTISELECT 
指定的文件名列表框中允许多个选择。如果还设置了OFN_EXPLORER的标志,这个对话框中使用“资源管理器风格的用户界面,否则,它使用的旧风格的用户界面。 
如 果用户选择多个文件,lpstrFile缓冲区返回到当前目录,然后选定的文件的文件名的路径。该nFileOffset件是的偏移量,在字节或字符,第 一个文件名,和的nFileExtension部件还没有使用。资源管理器风格的对话框,目录和文件名字符串是NULL分离的,一个额外的NULL字符 后,最后的文件名。通过这种格式的资源管理器风格的对话框,返回包含空格的长文件名的。对于旧风格的对话框,目录和文件名字符串由空格分隔的功能使用短文 件名的文件名中包含空格。您可以使用FindFirstFile函数长和短文件名之间的转换。 
一个旧风格的对话框,如果你指定一个自定义的模板定义的文件名列表框中必须包含LBS_EXTENDEDSEL的价值。 
OFN_CREATEPROMPT 
如果用户指定的文件不存在,这个标志使该对话框提示用户创建的文件的权限。如果用户选择创建的文件,对话框关闭,该函数返回指定名称的;否则,对话框保持打开状态。如果您使用此标志的OFN_ALLOWMULTISELECT标志,该对话框允许用户指定一个不存在的文件。 
OFN_DONTADDTORECENT 
Windows 2000/XP中防止系统添加一个链接到选定的文件在文件系统的目录,其中包含用户最近使用过的文件。要检索此目录的位置,请致电SHGetSpecialFolderLocation函数的CSIDL_RECENT标志。 
OFN_ENABLEHOOK 
启用钩子函数,中指定的lpfnHook会员。 
OFN_ENABLEINCLUDENOTIFY 
Windows 2000/XP系统:使对话框发送CDN_INCLUDEITEM通知的的消息到您的OFNHookProc的钩子程序,当用户打开一个文件夹。对话框发 送一个新打开的文件夹中的每个项目的通知。这些消息使您可以控制​​哪些项目对话框显示在文件夹中的项目清单。 
OFN_ENABLESIZING 
是Windows 2000/XP,Windows 98/Me中:打开资源管理器样式对话框,使用鼠标或键盘可以调整大小。默认情况下,浏览器风格的打开和保存对话框允许对话框,调整大小,无论是否设置了 这个标志。这个标志是必要的,如果你提供了一个钩子程序或自定义模板。旧风格的对话框不允许调整大小。 
OFN_ENABLETEMPLATE 
表 明lpTemplateName成员的hInstance部件识别模块中的一个对话框模板资源的名称是一个指针。 ,如果OFN_EXPLORER标志被设置,系统使用指定的模板来创建一个对话框,是一个孩子的默认资源管理器风格的对话框。如果 OFN_EXPLORER标志没有被设置,系统使用模板来创建一个旧风格的对话框,它取代了默认对话框。 
OFN_ENABLETEMPLATEHANDLE 
表 示的hInstance成员标识了一个数据块,其中包含预先载入的对话框模板。如果这个标志是指定的系统忽略的lpTemplateName的。 ,如果OFN_EXPLORER标志被设置,系统使用指定的模板来创建一个对话框,是一个孩子的默认资源管理器风格的对话框。如果 OFN_EXPLORER标志没有被设置,系统使用模板来创建一个旧风格的对话框,它取代了默认对话框。 
OFN_EXPLORER 
表示,任何自定义“打开”或“另存为”对话框中使用新的浏览器类型的自定义方法。欲了解更多信息,请参见“资源管理器风格的钩子程序和资源管理器风格的自定义模板。 
默认情况下,打开和另存为对话框使用资源管理器风格的用户界面,无论是否设置了这个标志。这个标志是必要的,只有当你提供一个钩子程序或自定义模板,或设置OFN_ALLOWMULTISELECT标志。 
如果你想老风格的用户界面,省略了OFN_EXPLORER标志,并提供一个替代旧式的模板或钩子程序。如果你想在旧的风格,但并不需要一个自定义的模板或钩子程序,只需提供一个钩子程序,它总是返回FALSE。 
OFN_EXTENSIONDIFFERENT 
指定用户输入一个不同的文件扩展名从指定的扩展名由lpstrDefExt。该函数不使用此标志,如果lpstrDefExt NULL。 
OFN_FILEMUSTEXIST 
指 定用户中的现有文件的文件名输入字段中键入唯一名称。如果这个标志被指定,用户输入一个无效的名字,对话框的程序中显示一个消息框,警告。如果这个标志被 指定,OFN_PATHMUSTEXIST标志也使用。在打开对话框中,可以使用此标志。它不能使用另存为“对话框中。 
OFN_FORCESHOWHIDDEN 
Windows 2000/XP系统:强制放映系统和隐藏文件,从而替代用户设置显示或不显示隐藏文件。然而,未示出的文件都被标记为系统和隐藏。 
OFN_HIDEREADONLY 
隐藏只读“复选框。 
OFN_LONGNAMES 
对于旧风格的对话框,这个标志使对话框使用长文件名。如果这个标志没有被指定,或如果在OFN_ALLOWMULTISELECT的标志也设置,使用旧风格的对话框的文件名中包含空格的短文件名(8.3格式)。资源管理器风格的对话框忽略此标志,并始终显示长文件名。 
OFN_NOCHANGEDIR 
恢复当前目录到原来的值,如果用户改变了目录,而搜索的文件。 
Windows NT 4.0/2000/XP的:这个标志是无效的GetOpenFileName。 
OFN_NODEREFERENCELINKS 
指示对话框返回的路径和文件名,选定的快捷方式(LNK)文件。如果这个值没有指定,则对话框返回的快捷方式引用的文件的路径和文件名。 
OFN_NOLONGNAMES 
对于旧风格的对话框,这个标志使该对话框中使用短文件名(8.3格式)。资源管理器风格的对话框忽略此标志,并始终显示长文件名。 
OFN_NONETWORKBUTTON 
隐藏和禁用网络按钮。 
OFN_NOREADONLYRETURN 
指定的文件不具有“只读”复选框处于选中状态,而不是在写保护的目录。 
OFN_NOTESTFILECREATE 
指 定的文件不被创建对话框之前被关闭。如果应用程序保存的文件上一个create-nonmodify的网络共享,应指定此标志。当一个应用程序指定了这个 标志,库不检查写保护,一个完整的磁盘,打开驱动器门或网络保护。应用程序使用此标志必须小心,因为一旦关闭,就无法重新打开一个文件可以进行文件操作。 
OFN_NOVALIDATE 
指 定的通用对话框允许返回的文件名中的无效字符。通常情况下,调用应用程序使用一个钩子程序,检查文件名通过使用FILEOKSTRING的消息。如果编辑 控件中的文本框为空或包含什么,但空间,更新的文件和目录的列表。如果在文本框中编辑控件中包含任何东西,nFileOffset和 nFileExtension通过分析文本生成的值。没有默认的扩展名添加到文本,也不是文本复制到指定的缓冲区的lpstrFileTitle。如果所 指定nFileOffset的值小于零,该文件名是无效。否则,该文件名称是有效的,和nFileExtension和nFileOffset作为,如果 OFN_NOVALIDATE标志没有被指定,可以使用。 
OFN_OVERWRITEPROMPT 
另存为“对话框中生成一个消息框,如果选择的文件已经存在。用户必须确认是否覆盖文件。 
OFN_PATHMUSTEXIST 
指定用户可以只输入有效的路径和文件名。如果使用此标志时,用户在文件名输入字段中键入一个无效的路径和文件名,对话框函数在消息框中显示一个警告。 
OFN_READONLY 
使只读“复选框最初创建对话框时,可以选择。此标志表示只读“复选框关闭该对话框时的状态。 
OFN_SHAREAWARE 
指 定,如果OpenFile函数调用失败,因为网络共享冲突,错误被忽略,对话框返回选定的文件名。如果这个标志没有设置,该对话框会通知你的钩子程序,网 络共享冲突发生时,由用户指定的文件名。如果您设置的OFN_EXPLORER标志,对话框发送的CDN_SHAREVIOLATION,消息钩子程序。 如果你不设置OFN_EXPLORER,对话框发送SHAREVISTRING的注册消息的钩子程序。 
OFN_SHOWHELP 
使对话框显示“帮助”按钮。 hwndOwner拥有成员必须指定的窗口,当用户点击“帮助”按钮,对话框发送注册消息接收HELPMSGSTRING。一个资源管理器风格的对话框发送一个CDN_HELP的通知消息,你的钩子程序,当用户点击“帮助”按钮。 
OFN_USESHELLITEM 
不要使用。 
 
简介 
CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。 
可以用构造函数提供的方式使用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::GetExtName( ) 得到完整的文件扩展名,如: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; 

 

原文出处:http://www.hacktea8.com/read.php?tid-1490-ds-1.html

posted @ 2013-01-26 10:43  编程狂热者  阅读(3991)  评论(0编辑  收藏  举报