- 版本
VS2013
实例说明
通过对话框选择要打开的文件,可以使用CFileDialog构造函数,也可以使用API函数GetOpenFileName。
本实例使用GetOpenFileName函数选择文件。程序运行效果如图所示。
- 界面
- 关键技术
GetOpenFileName函数用于创建一个Open公共对话框,使用户指定驱动器、目录和文件名,或使用户打开文件。
基本格式如下:
BOOL GetOpenFileName(LPOPENFILENAME lpofn);
参数说明:
lpofn:指向包含初始化对话框的信息的一个OPENFILENAME结构。当OpenFileName函数返回时,此结构包含有关用户选择的信息。
返回值:如果用户指定了一个文件名,单击OK按钮,返回值为非0。由OPENFILENAME结构的lpstrFile成员指向的缓冲区含有全路径和用户指定的文件名。如果用户取消或关闭Open对话框或错误出现,返回值为0.
OPENFILENAME结构如下:
typedef struct tagOFN { DWORD lStructSize; //指定这个结构的大小 HWND hwndOwner; //对话框窗口句柄 HINSTANCE hInstance; LPCWSTR lpstrFilter; //过滤器 LPWSTR lpstrCustomFilter; //过滤器样式 DWORD nMaxCustFilter; //lpstrCustomFilter缓冲区大小 DWORD nFilterIndex; //当前选择的过滤器的索引 LPWSTR lpstrFile; //文件名 DWORD nMaxFile; //lpstrFile缓冲的大小 LPWSTR lpstrFileTitle; //文件名和扩展名的缓冲 DWORD nMaxFileTitle; //lpstrFileTitle缓冲的大小 LPCWSTR lpstrInitialDir; //初始目录 LPCWSTR lpstrTitle; //对话框标题 DWORD Flags; //位标记 WORD nFileOffset; //偏移 WORD nFileExtension; //扩展名起始位置 LPCWSTR lpstrDefExt; //默认扩展名 LPARAM lCustData; //应用程序定义的数据 LPOFNHOOKPROC lpfnHook; //钩子 LPCWSTR lpTemplateName; //对话框模板资源名 }OPENFILENAME;
- 设计过程
(1)新建一个基于对话框的应用程序
(2)向窗体中添加一个按钮控件,关联响应函数OnOpen
(3)主要代码如下:
void CDemoDlg::OnOpen() { // TODO: 在此添加控件通知处理程序代码 OPENFILENAME ofn; char* filter = "doc *.doc xls *.xls ppt *.ppt all *.* "; ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = this->GetSafeHwnd(); ofn.lpstrFilter = filter;//文件过滤器 ofn.lpstrCustomFilter = NULL; ofn.nFilterIndex = 0; char filename[128]; filename[0] = '