VC通用对话框类CFileDlg
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(BOOL    bOpenFileDialog,
LPCTSTR    lpszDefExt=NULL,
LPCTSTR    lpszFileName=NULL,
DWORD    dwFlags    =    OFN_HIDEREADONLY    |    OFN_OVERWRITEPROMPT,
LPCTSTR    lpszFilter=NULL,
CWnd    *    pParentWnd=NULL);
第一个参数 bOpenFileDialog为TRUE或FALSE。TRUE为打开文件;FALSE为保存文件。
第二个参数 lpszDefExt为缺省的扩展名。
指向包含默认扩展名的缓冲。如果用户忘记输入扩展名,GetOpenFileName和GetSaveFileName附加这个扩展名到文件名中。这个字符串可以是任一长度,但但只有头三个字符被附加。字符串不应该包含一个句点(.)。如果这个成员是NULL并且用户忘记了输入一个扩展名,那么将没有扩展名被附加。
第三个参数 lpszFileName为显示在文件名组合框的编辑框的文件名,一般可选NULL
第四个参数 dwFlags为对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
OFN_ALLOWMULTISELECT:允许选择多个文件
OFN_CREATEPROMPT:如果输入的文件名不存在,则对话框返回询问用户是否根据次文件
名创建文件的消息框
OFN_FILEMUSTEXIST:只能输入已存在的文件名
OFN_FORCESHOWHIDDEN:可以显示隐藏的文件
OFN_NOREADONLYRETURN:不返回只读文件
OFN_OVERWRITEPROMPT:保存的文件已存在时,显示文件已存在的信息
第五个参数 LpszFilter为下拉列表枢中显示文件类型。 
c++ 字符串常量指向一对以空字符结束的过滤字符串的一个缓冲。缓冲中的最后一个字符串必须以两个NULL字符结束。
第一个字符串是过滤器描述的显示字符串(例如,“文本文件”),第二个字符指定过滤样式(例如,“*.TXT”)。要为一个显示字符串指定多个过滤样式,使用分号(“;”)分隔样式(例如,“*.TXT;*.DOC;*.BAK”)。一个样式字符串中可以包含有效的文件名字字符及星号(*)通配符。不能在样式字符串中包含空格。
系统不能改变过滤器的次序。它按lpstrFilter指定的次序显示在文件类型组合框中。
如果lpstrFilter是NULL,对话框不能显示任何过滤器。
第六个参数 pParentWnd一般可选NULL。
成员变量
OPENFILENAME结构
OPENFILENAME结构包含了GetOpenFileName和GetSaveFileName函数用来初始化打开或另存为对话框的信息。在用户关闭对话框后,系统返回关于用户的选择信息到这个结构中。
结构体原型
typedef struct tagOFN {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;
lStructSize
指定这个结构的大小,以字节为单位。
Windows 95/98和Windows NT 4.0:特意为Windows 95/98或Windows NT 4.0,及带有WINVER和_WIN32_WINNT >= 0x0500编译时,为这个成员使用OPENFILENAME_SIZE_VERSION_400。
Windows 2000及更高版本:这个参数使用sizeof (OPENFILENAME) 。
hwndOwner
指向所有者对话框窗口的句柄。这个成员可以是任意有效窗口句柄,或如果对话框没有所有者它可以为NULL。
hInstance
如果在Flags成员中设置了OFN_ENABLETEMPLATEHANDLE标记,hInstance成员指向包含一个对话框模板的内存对象。如果OFN_ENABLETEMPLATE标记被设置,hInstance是一个指向通过lpTemplateName成员命名的对话框模板的模块。如果两者都没有被设置,这个成员被忽略。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。