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 一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器,仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器。 pParentWnd 指向文件对话框对象的父窗口或拥有者窗口。 要使用CFileDialog,首先用构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的值来初始化对话框控件的值或状态。初始化对话框控件后,调用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变量。 打开大量文件: 使用CFileDialog类并设置OFN_ALLOWMULTISELECT标志时,OPENFILENAME结构体的lpstrFile成员是一个指向用户申请分配的缓冲区,里面接受所选的路径和文件名列表,这个列表的每一项由一个NULL隔开,最末以两个NULL结束。nMaxFile成员指明了缓冲区的大小,如果所选择的文件名的加起来的总长度超过了此值,则DoModal函数返回IDCANCEL,如果用户试图打开超过缓冲区大小的文件集的话,CommDlgExtendedError()将返回FNERR_BUFFERTOOSMALL,这时候,lpstrFile的前两个byte将会包含实际需要的缓冲区的字节数。 lpstrFile缓冲区字节数限制: 1 在Windows 95/98/Me下只能在ANSI下使用,且没有大小限制; 2 在Windows NT 4.0及更早版本下,被限制在32k字节以内; 3 在Windows 2000/XP版本下,MSDN中介绍说在ANSI下32k字节,Unicode下没有限制。但是,实际上两者都被限制在32k字节以内; 示例: 以下是一个使用该类进行多文件名选择的例子。 #include "cderr.h" CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, NULL, NULL); CString fileName; DWORD MAXFILE = 32*1024+13; //可以适当大一些,但是不要太大,多了也是浪费! /*虽然限制在32k字节以内,但是在运行时少于此值将会返回IDCANCEL及FNERR_BUFFERTOOSMALL错误。运行时我选择了800个文件只能读取564个文件路径和文件名列表,共计32781个字节*/ dlg.m_ofn.lpstrFile = fileName.GetBuffer(MAXFILE); dlg.m_ofn.nMaxFile = MAXFILE; fileName.ReleaseBuffer(); int iReturn = dlg.DoModal(); if(iReturn == IDOK) { int nCount = 0; POSITION pos = dlg.GetStartPosition(); while (pos != NULL) { dlg.GetNextPathName(pos); nCount++; } CString str; str.Format(_T("Successfully opened %d files "), nCount); AfxMessageBox(str); } else if(iReturn == IDCANCEL) AfxMessageBox(_T("Cancel")); if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL) AfxMessageBox(_T("BUFFERTOOSMALL")); 凯盛科技声明:文章版权归原创作者所有,仅供学习使用http://kaisheng.javaeye.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值