1 | CFileDialog:CFileDialog( BOOL bOpenFileDialog, |
2 | LPCTSTR lpszDefExt=NULL, |
3 | LPCTSTR lpszFileName=NULL, |
4 | DWORD dwFlags |
5 | LPCTSTR lpszFilter=NULL, |
6 | CWnd |
bOpenFileDialog:TRUE为打开文件对话框;FALSE为保存文件对话框
lpszDefExt:缺省的扩展名
lpszFileName:缺省显示在文件名组合框的编辑框的文件名,一般可选NULL
dwFlags:对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
类型:
lpszFilter:文件筛选类型,它指明可供选择的文件类型和相应的扩展名。参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
pParentWnd:父窗口指针,一般可选NULL.
2、对话框选项常用属性(实例:dialog)
dialog.m_ofn.lpstrTitle:显示窗口标题。
dialog.m_ofn.lpstrInitialDir:初始化展开路径。
dlg.m_ofn.lpstrFile:默认文件
dlg.m_ofn.lpstrFilter:文件筛选类型,注意与lpszFilter区别,要用"\0",不能用"|"
如:dlg.m_ofn.lpstrFilter="所有文件\0*.*\0图像文件\0*.jpg;*.bmp;*.gif\0\0";
3、对话框常用方法
INT_PTR CFileDialog::DoModal() 显示文件操作对话框,常用返回值:IDOK,点击了打开确定操作 IDCANCEL,取消
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c:\test\test.txt。注,多文件选择时返回目录名
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
4、示例——多文件打开操作,获取文件名以“;”分开
01 | //本代码测试环境VS2008 c++ MFC |
02 | CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, |
03 | NULL, this ); |
04 | |
05 | dlg.m_ofn.lpstrInitialDir = (BSTR)directoryName; //设置对话框默认呈现的路径 |
06 | |
07 | CString strFilePath; |
08 | if (dlg.DoModal() == IDOK) |
09 | { |
10 | CArray<CString, CString> aryFilename; |
11 | POSITION posFile=dlg.GetStartPosition(); |
12 | while (posFile!=NULL) |
13 | { |
14 | aryFilename.Add(dlg.GetNextPathName(posFile)); |
15 | } |
16 | for ( int i=0;i<aryFilename.GetSize();i++) |
17 | { |
18 | if (strFilePath.GetLength()>0) |
19 | { |
20 | strFilePath.AppendChar( ';' ); //多个文件‘;’分开 |
21 | } |
22 | strFilePath+= aryFilename.GetAt(i); |
23 | } |
24 | } |