MFC和Qt一样为我们提供了系统自带的文件对话框,使用CFileDialog类就可以了,首先构造一个对象并提供相应的阐述,构造函数原型:
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 ,为TRUSE则显示打开对话框,位FALSE则显示保存文件对话框。
lpszDefExt
这个是指定默认的文件扩展名 (默认为NULL)
lpszFileName
指定默认的文件名(默认为NULL)
dwFlags
指定一些特定的风格,例如隐藏只读, 写入提醒,覆盖提示。。。。等等 可以以使用 “ | ”这个符号将多个值连接起来(具体可以看下面的代码展示)
lpszFilter
这是一个重要的参数,他可以指明可供选择的文件类型和相应的扩展名,参数格式如下:
“Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||”;
- 文件类型说明和扩展名用 “|”分隔
- 同种类型文件的扩展名间可以用” ; “符号分隔
- 每种文件类型用 ” | ” 分隔
- 末尾使用 ” || “指明
参数就介绍完了,下面看看我写的一个一段小代码吧
void Ctest4Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog zploo( TRUE, // TRUE显示文件打开对话框, FALSE显示文件保存对话框 _TEXT("txt"), //指定默认的文件扩展名 默认为 NULL NULL, // 指定默认的文件名。 默认为NULL OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //OFN_HIDEREADONLY表示隐藏文件对话框上的“Read Only”复选框 //OFN_OVERWRITEPROMPT表示在保存文件对话框中如果你选择的文件存在了,就弹出一个消息对话框,要求确定是否要覆盖此文件。 _TEXT("文本文件(*.txt,*.ini,*.log)|*.txt;*.ini;*.log|全部文件(*.*)|*.*||") ); if (zploo.DoModal()) //启动模型 { CString path = zploo.GetPathName(); SetDlgItemText(IDC_EDIT1, path); CFile p(path, CFile::modeRead); CStringA buf; p.Read(buf.GetBufferSetLength(p.GetLength()), p.GetLength()); SetDlgItemText(IDC_EDIT2, CString(buf)); p.Close(); // 关闭文件句柄 buf.ReleaseBuffer(); // 释放缓冲区域 } }
CFileDialog中的其他成员函数说明:
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变量。