MFC----CFileDialog类

1.CFileDialog类原型

CFileDialog类原型封装了Windows常用的打开文件或保存文件的文件对话框

CFileDialog::CFileDialog(
    BOOL bOpenFileDialog,       //TRUE则显示打开文件对话框,FALSE则显示保存文件对话框。 
    LPCTSTR lpszDefExt = NULL,  //指定默认的文件扩展名。 
    LPCTSTR lpszFileName = NULL,//指定默认的文件名。
    DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,//指明一些特定风格。 
    LPCTSTR lpszFilter = NULL,  //是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。
    CWnd* pParentWnd = NULL     //为父窗口指针。
);

参数:

(1)bOpenFileDialg 如果为TRUE, 则创建文件打开对话框;如果为FALSE,则创建文件保存对话框。

(2)lpszDefExt 缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。如果为NULL则不添加扩展名。

(3)lpszFileName 初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。

(4)dwFlags 一个或多个标志的组合,使你可定制对话框。要了解这些标志的描述,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。如果你改变m_ofn.Flags结构成员,在改变中用OR操作保持缺省行为完整。

(5)lpszFilter 一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器
(6)pParentWnd 指向文件对话框对象的父窗口或拥有者窗口(可缺省)。

实例:

//定义一个局部变量。
CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,L"动态连接库(*.dll)|*.dll||");
//打开对话框,并判断用户是否确认。PS:用户有可能取消,或直接关闭对话框。此处取反,目的为了阻止后面部分代码执行。
if(file.DoModal() != IDOK) return;
//获取文件名称
file.GetFileName();
//获取文件路径,此处只想说明下file.GetPathName()的返回值类型。
CString filePath = file.GetPathName();

2.CFileDialog保存文件获取扩展名(后缀名)

方法1、通过CFileDialog.m_ofn.nFilterIndex过滤器编号来区分当前选择的扩展名

CFileDialog fileDialog(
FALSE, NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
\_T("DataFile(*.tif)|*.tif|Data File(*.sct)|*.sct||"),this);
if(fileDialog.DoModal()==IDOK)
{         
	if (fileDialog.m_ofn.nFilterIndex == 1)
	{
		//tif
	}
	else if (fileDialog.m_ofn.nFilterIndex == 2)
	{
		//sct
	}
}

方法2、通过GetSaveFileName函数,追加扩展名,第二个参数不能为NULL,可以是L""

CFileDialog fileDialog(
FALSE,L"",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
\_T("DataFile(*.tif)|*.tif|Data File(*.sct)|*.sct||"),this);
if(fileDialog.DoModal()==IDOK)
{         
	GetSaveFileName(&fileDialog.m_ofn);
	//获取扩展名,没有‘.’
	fileDialog.GetFileExt();
}

方法3、重写CFileDialog 中的OnInitDialogOnTypeChange函数

扫描二维码关注公众号,回复: 2753823 查看本文章
BOOL CFileDialogEx::OnInitDialog()
{
	CFileDialog::OnInitDialog();
 
	SetDefExt("tif");
	returnTRUE;  // return TRUE unless you set thefocus to a control
}
 
void CFileDialogEx::OnTypeChange()
{
	intn=m_ofn.nFilterIndex;
	if(n==1)
	{
		SetDefExt(("tif"));
	}
	elseif (n==2)
	{
		SetDefExt(("sct"));
	}
	CFileDialog::OnTypeChange();
}
 
CFileDialogEx fileDialog(FALSE,L"",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,\
	_T("DataFile(*.tif)|*.tif|Data File(*.sct)|*.sct||"),this);
if(fileDialog.DoModal()==IDOK)
{         
	//获取扩展名,没有‘.’
	fileDialog.GetFileExt();
}

猜你喜欢

转载自blog.csdn.net/W614171629/article/details/81627388