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 中的OnInitDialog和OnTypeChange函数
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();
}