1-3学习MFC之文件对话框

本文介绍了在MFC中如何使用CFileDialog类创建文件对话框,用于文件打开和保存。详细讲解了构造函数参数,如默认扩展名、文件名、风格和过滤器,并列举了对话框的6个常用成员函数,如GetPathName()和GetNextPathName()。此外,还提到了通过设置dwFlag参数实现多文件选择功能,并提供了参考资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件对话框是在开发程序时经常要用到的一种对话框。在MFC中,可以使用CFileDialog类创建文件对话框,用于文件打开和保存。

CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:

CFileDialog::CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORDdwFlags = 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|DataFiles (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

   pParentWnd 为父窗口指针。

对话框有6个常用的成员函数,用来得到文件名。

    GetPathName()  得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt

    GetFileName()  得到完整的文件名,如:test1

    GetExtName()  得到完整的文件扩展名,如:txt

    GetFileTitle( )  得到完整的文件名,包括目录名和扩展名如:test1.txt

还有两个函数,用于选取了多个文件时使用。

    POSITIONCFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。

    GetNextPathName(POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

一个简单的例子。

     1、首先用VC建一个简单的对话框工程,添加一些空间。暂时不用写任何代码,可得到如下效果。


    2、按钮控件,单击函数下面添加代码如下:

void CFileDlgDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	CString PathName;		// 定义四个变量,分别保存完整路径名、文件名、后缀名和文件标题
	CString FileName;
	CString ExtName;
	CString FileTitle;

	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All File(*.*)|*.*|Text File(*.txt)|*.txt||", AfxGetMainWnd());
	if (dlg.DoModal() == IDOK){
		PathName = dlg.GetPathName();		// 调用成员函数,分别获取这四个名字
		FileName = dlg.GetFileName();
		ExtName  = dlg.GetFileExt();
		FileTitle= dlg.GetFileTitle();

		SetDlgItemText( IDC_EDIT1, PathName);		//设置编辑框中的内容
		SetDlgItemText( IDC_EDIT2, FileName);
		SetDlgItemText( IDC_EDIT3, ExtName);
		SetDlgItemText( IDC_EDIT4, FileTitle);
	}
}

    3、编译,链接,执行。效果如下:



整个工程文件链接地址:http://pan.baidu.com/s/1dDpMjxJ


CFileDialog中的风格dwFlag参数,可以指定打开的方式风格。例如,添加OFN_ALLOWMULTISELECT参数,可以同时选择多个文件。关于更多其他的风格,可以参考帮助文档。选取了多个文档,就需要使用后面的两个成员函数来依次获取每个文件了。一个简单的例子:

int retval = dlg.DoModal();
if(retval==IDCANCEL)
	return false;
POSITION pos_file;
pos_file = dlg.GetStartPosition();
CArray<CString, CString> ary_filename;
while(pos_file != NULL)
	ary_filename.Add(dlg.GetNextPathName(pos_file));

参考资料:

百度百科:http://baike.baidu.com/link?url=b7-2_pFyfWhkkis5iopATc-t1KdMWM_j5GTiFRVmcdnppmMl_ZCstD9DYcZ5u_YatsJferVgfY7azZEwg3wn7K

CFileDialog用法简介:http://blog.youkuaiyun.com/demok2010/article/details/5957523

Visual C++程序设计自学手册

零基础学Visual C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值