• 版本

VS2013

 

实例说明

通过对话框选择要打开的文件,可以使用CFileDialog构造函数,也可以使用API函数GetOpenFileName。

本实例使用GetOpenFileName函数选择文件。程序运行效果如图所示。

 

  • 界面

VC++使用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\0*.doc\0xls\0*.xls\0ppt\0*.ppt\0all\0*.*\0\0";
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] = '\0';
ofn.lpstrFile = filename;
ofn.nMaxFile = 128;
ofn.lpstrFileTitle = NULL;
ofn.lpstrInitialDir = NULL;//初始路径
ofn.lpstrTitle = "打开文件\0";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_PATHMUSTEXIST;
ofn.lpstrDefExt = NULL;
if (GetOpenFileName(&ofn) == IDOK)
{
MessageBox(filename, "选中的文件是", MB_OK);
}

}


 

  • 演示

VC++使用GetOpenFileName选择文件_打开文件_02

 

Caesar卢尚宇

2021年2月6日