CFileDialog封装用于文件打开或文件保存操作的通用对话框;
1、构造函数原型
explicit CFileDialog(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL,
DWORD dwSize = 0,
BOOL bVistaStyle = TRUE);}
参数
bOpenFileDialog为对话框类型的参数。 如果为 TRUE 则构造 "文件打开" 对话框。 如果为 FALSE 则构造“文件保存”对话框;
lpszDefExt为默认文件名扩展名, 如果在 Filename 框中不包含已知的扩展名,则 lpszDefExt指定的扩展名将自动加到文件名中。 如果此参数为 NULL,则不附加任何扩展。
lpszFileName显示在"文件名"框中的初始文件名。 如果为 NULL,则不显示初始文件名。
dwFlags可用于自定义对话框的一个或多个标志的组合。
lpszFilter一系列字符串对,用于指定可以应用于文件的筛选器。 如果指定文件筛选器,则"文件"列表中将仅显示与筛选条件匹配的文件。
参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
pParentWnd指向文件对话框的父窗口或所有者窗口的指针;
dwSize为OPENFILENAME结构的大小。 此值取决于操作系统版本;
bVistaStyle指定文件对话框样式的参数。 将其设置为 TRUE 以使用新的 Vista 样式文件对话框。 否则,将使用对话框的旧样式。
要使用CFileDialog,首先用构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的值来初始化对话框控件的值或状态。初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。
2、重要函数
CString CFileDialog::GetPathName( ) 得到完整的文件名(包括目录名和扩展名)如c:/test/test1.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变量。
3、示例
(1)、打开文件
void COpenSaveFileDialogDlg::OnBnClickedButtonOpen()
{
BOOL isOpen = TRUE; //是否打开(否则为保存)
CString defExt("wav"); //默认打开的文件路径
CString filename("test.wav"); //默认打开的文件名
CString filter("Wave Filter(*.wav)| *.wav|All Files (*.*)|*.*||"); //文件过虑的类型
CFileDialog openFileDlg(isOpen, defExt, filename, OFN_HIDEREADONLY|OFN_READONLY, filter, NULL);
openFileDlg.GetOFN().lpstrInitialDir = TEXT("C:\\Users\\huguofeng\\source\\repos\\MutiMedia\\test\\");
INT_PTR result = openFileDlg.DoModal();
CString filePath = filename;
if(result == IDOK) {
filePath = openFileDlg.GetPathName();
}
CWnd::SetDlgItemTextW(IDC_EDIT_SRC, filePath);
}
(2)、保存文件
void COpenSaveFileDialogDlg::OnBnClickedButtonSave()
{
BOOL isOpen = FALSE; //是否打开(否则为保存)
CString defExt("wav"); //默认打开的文件路径
CString filename("test.wav"); //默认打开的文件名
CString filter = filter("Wave Filter(*.wav)| *.wav|All Files (*.*)|*.*||"); //文件过虑的类型
CFileDialog openFileDlg(isOpen, defExt, filename, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, filter, NULL);
openFileDlg.GetOFN().lpstrInitialDir =TEXT("C:\\Users\\huguofeng\\source\\repos\\MutiMedia\\test\\");
INT_PTR result = openFileDlg.DoModal();
CString filePath = fileName;
if(result == IDOK) {
filePath = openFileDlg.GetPathName();
}
CWnd::SetDlgItemTextW(IDC_EDIT_DEST, filePath);
}