#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
{
 OPENFILENAME ofn;
 //文件打开对话框主要通过GetOpenFileName函数实现
 //其参数为OPENFILENAME指针类型
 //此处定义一个OPENFILENAME类型的变量ofn
 char szFile[MAX_PATH];
 //定义保存打开文件路径的char数组
 //数组长度为MAX_PATH
 //MAX_PATH是Windows操作系统中的路径最长长度常量为260
 ZeroMemory(&ofn, sizeof(ofn));
 //OPENFILENAME是种结构体
 //ZeroMemory将结构体置零
 //对比memset函数
 ofn.lStructSize = sizeof(ofn);
 //结构体本身能够知道自己的大小,为什么很多WINAPI结构体中都有存储结构体大小的变量?
 //Windows发展的历史原因。
 ofn.lpstrFile = szFile;
 //ofn.lpstrFile指针指向szFile
 ofn.lpstrFile[0] = TEXT('\0');
 //相当于szFile[0] = '\0'
 //也就是置零
 //ofn.lpstrFile和szFile[MAX_PATH]是如何取得值的?
 ofn.nMaxFile = sizeof(szFile);
 ofn.lpstrFilter = TEXT("文本文档(*.txt)\0*.txt\0所有文件\0*.*\0");
 //文件类型过滤器
 //'\0'将其分隔
 //每两段为一组,前面部分为显示值,后面部分为过滤。
 ofn.nFilterIndex = 1;
 //默认过滤文件类型索引
 //此处的索引数字从1开始
 ofn.lpstrFileTitle = NULL;
 ofn.nMaxFileTitle = 0;
 ofn.lpstrInitialDir = NULL;
 ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
 //OFN_EXPLORER——新界面
 //OFN_PATHMUSTEXIST——文件路径必须存在
 //OFN_FILEMUSTEXIST——文件必须存在
 if(GetOpenFileName(&ofn))
  MessageBox(NULL, szFile, NULL, MB_OK);
 return 0;
}