打开文件

【勇芳软件工作室】汉化HomePreviousNext

本主题描述显示“打开”对话框的示例代码,以便用户可以指定要打开的文件的驱动器,目录和名称。示例代码首先初始化OPENFILENAME结构,然后调用GetOpenFileName函数显示对话框。

在此示例中,lpstrFilter成员指向一个缓冲区,指定两个文件名过滤器,用户可以选择该过滤器来限制显示的文件名。缓冲区包含一个双null终止的字符串数组,其中每对字符串指定一个过滤器。nFilterIndex成员指定在创建对话框时使用第一个模式。

此示例在成员中设置OFN_PATHMUSTEXIST和OFN_FILEMUSTEXIST标志。这些标志使对话框在返回之前验证用户实际存在的路径和文件名。

如果用户单击确定按钮并且指定的路径和文件名存在,则GetOpenFileName函数返回TRUE。在这种情况下,由lpstrFile成员指向的缓冲区包含路径和文件名。示例代码在调用CreateFile函数时使用此信息来打开文件。

虽然此示例未设置OFN_EXPLORER标志,但仍显示默认的资源管理器式打开对话框。但是,如果要提供钩子过程或自定义模板,并且您想要Explorer用户界面,则必须设置OFN_EXPLORER标志。

OPENFILENAME ofn; //常见的对话框结构
char szFile[260]; //缓冲区文件名
HWND hwnd; //所有者窗口
HANDLE hf; //文件句柄

//初始化OPENFILENAME
ZeroMemory(&ofn, sizeof(OPENFILENAME));

ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);

ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

//显示打开对话框。

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);