浏览和打开文件

原文:http://blog.csdn.net/tcjiaan/article/details/8653836

在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件。本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单。

方法一:老规矩

这是一种传统方法,使用GetOpenFileName或者GetSaveFileName函数,看名字就知道,前者用来打开文件,后者是保存文件,这两个函数的用法是一样的,因此,我只演示其中一个。

无论你使用哪个函数,都要涉及一个结构体——OPENFILENAME。关于它的成员,我就不一一来说了,挑几个有用的扯一扯。

lStructSize:结构的大小,弄个sizeof就行了。

lpstrFilter:设置过滤器。注意啊,这个过滤器字符串和.NET中的写法不同,.NET的写法是从VB6继承过来,可以写成“垃圾文件 | *.rbs | 老鼠文件 | *.mos”,我们这里不是用“|”来分隔的,而是用“\0”分隔,而结尾是两个NULL,即两个“\0”

  • WCHAR strFilename[MAX_PATH];//存放文件名  
  • //初始化  
  • ZeroMemory(&opfn, sizeof(OPENFILENAME));  
  • opfn.lStructSize = sizeof(OPENFILENAME);//结构体大小  
  • //设置过滤  
  • opfn.lpstrFilter = L"所有文件\0*.*\0文本文件\0*.txt\0MP3文件\0*.mp3\0";  
  • //默认过滤器索引设为1  
  • opfn.nFilterIndex = 1;  
  • //文件名的字段必须先把第一个字符设为 \0  
  • opfn.lpstrFile = strFilename;  
  • opfn.lpstrFile[0] = '\0';  
  • opfn.nMaxFile = sizeof(strFilename);  
  • //设置标志位,检查目录或文件是否存在  
  • opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;  
  • //opfn.lpstrInitialDir = NULL;  
  • // 显示对话框让用户选择文件  
  • if(GetOpenFileName(&opfn))  
  • {  
  •     //在文本框中显示文件路径  
  •     HWND hEdt = GetDlgItem(hDlg, IDC_EDTFILENAME);  
  •     SendMessage(hEdt, WM_SETTEXT, NULL, (LPARAM)strFilename);  
  • }  


 ZeroMemory函数前面说过了,你就当作它用来初始化结构就行了。

你可能会疑问,不是说lpstrFilter的字符串是两个NULL结尾的吗,为什么代码中只有一个?因为你输入的字符串会在后面自动加了个‘\0’,所以我们加一个就OK,后面自动加上一个,就两个了。

下图是执行结果:

 

 

GetSaveFileName的用法也一样,有兴趣的朋友可以回家自己玩一下。

posted @ 2016-07-29 19:09  何人之名  阅读(257)  评论(0)    收藏  举报