用来打开和保存文件的类:CFileDialog
定义对象CFileDialog FileDlalog;
1、定义对话框属性
explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, );
bOpenFileDialog指定创建对话框类型:TRUE为打开文件对话框,FALSE为保存文件对话框
lpszDefExt默认扩展名,在缺省的情况下使用
lpszFileName默认文件名,主动显示在对话框文件名内
dwFlags为对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
OFN_ALLOWMULTISELECT:允许选择多个文件
OFN_CREATEPROMPT:如果输入的文件名不存在,则对话框返回询问用户是否根据次文件名创建文件的消息框
OFN_FILEMUSTEXIST:只能输入已存在的文件名
OFN_FORCESHOWHIDDEN:可以显示隐藏的文件
OFN_NOREADONLYRETURN:不返回只读文件
OFN_OVERWRITEPROMPT:保存的文件已存在时,显示文件已存在的信息
lpszFilter列出下拉菜单列表中的文件类型
文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
例如:"JPG File(*.jpg)|*.jpg|All File(*.*)|*.*||"
2、显示对话框
FileDlalog.DoModal(); //返回值为IDOK,IDCANCEL
3、获取文件名
//dwFlags没有设置OFN_ALLOWMULTISELECT,即只能单选文件
FileDialog.GetFileName() //获取文件名,不含路径,如:Notepad.exe
FileDialog.GetFileTitle() //获取标题名,如Notepad
FileDialog.GetPathName() //获取完整路径名,如C:\window\Notepad.exe
//但如果设置了OFN_ALLOWMULTISELECT,怎么不能使用GetFileName获取文件名,使用下列函数
POSITION pos = FileDialog.GetStartPosition(); //获取第一个文件在列表中的位置pos,POSITION是指针类型
While(pos) //循环调用,可以获得所有文件名
FileDialog.GetNextPathName(pos) //获取pos位置上的文件名,函数返回值类型为CString,即文件名