CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
1 要使用CFileDialog,先用CFileDialog构造函数构造一个对象,CFileDialog的构造函数如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
2 当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。m_ofn结构是OPENFILENAME类型的
typedef struct tagOFN {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;
3 初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。
CFileDialog //构造一个CFileDialog对象操作 DoModal //显示对话框并使用户可以进行选择 GetPathName //返回选定文件的完整路径 GetFileName //返回选定文件的文件名 GetFileExt //返回选定文件的扩展文件名
GetFileTitle //返回选定文件的标题
GetNextPathName //返回下一个选定文件的完整路径 GetReadOnlyPref //返回选定文件的只读状态 GetStartPosition //返回文件名列表的第一个元素位置覆盖的函数
实例代码如下,打开初始目录为C盘,选择其中的图片文件:
BOOL COpenFileDlgDlg::OnInitDialog() { .... TCHAR fileter[] = _T("图像(*.bmp;*.tif;*.jpg;*.JEPG) | *.bmp; *.tif; *.jpg;*.JEPG | All Files(*.*) | *.* ||"); //文件对话框 CFileDialog fdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, fileter); //设置初始文件目录 fdlg.m_ofn.lpstrInitialDir = _T("c:\\"); //弹出对话框,如果点击OK if(fdlg.DoModal() == IDOK) { //获取打开文件的文件名 CString fileName = fdlg.GetPathName(); CString tip("当前打开的文件名为:"); tip += fileName; MessageBox(tip.GetString(),NULL, MB_OK); } .... }