MFC打开文件对话框 CFileDialog的用法

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 (*.*)|*.*||”;

  1.  文件类型说明和扩展名用 “|”分隔
  2. 同种类型文件的扩展名间可以用” ; “符号分隔
  3. 每种文件类型用 ” | ” 分隔
  4. 末尾使用 ” || “指明

参数就介绍完了,下面看看我写的一个一段小代码吧

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();  // 释放缓冲区域  
	}

}

QQ截图20160111231504

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变量。

 

庄朋龙
庄朋龙

一个爱生活的技术菜鸟

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注