有些时候,我们的程序需要打开和保存指定类型的文件。比如.bmp .jpg .doc等等。
而点击主菜单上的MFC默认的打开和保存对话框时,系统会把所有的文件都显示出来,如果文件类型较多,要找到我们所需的文件就要不停地拖动滑块,造成了不必要的麻烦。那么,如何使这项工作变得简单又清晰呢?微软为我们提供了一个CFileDialog::CFileDialog函数,可以很好地解决这个问题。
先来看一下这个函数在MSDN的具体使用方法:
void CChildFrame::OnFileOpen() { // szFilters is a text string that includes two file name filters: // "*.my" for "MyType Files" and "*.*' for "All Files." char CChildFrame::szFilters[]= "MyType Files (*.my)|*.my|All Files (*.*)|*.*||"; // Create an Open dialog; the default file name extension is ".my". CFileDialog fileDlg (TRUE, "my", "*.my", OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this); // Display the file dialog. When user clicks OK, fileDlg.DoModal() // returns IDOK. if( fileDlg.DoModal ()==IDOK ) { CString pathName = fileDlg.GetPathName(); // Implement opening and reading file in here. ... //Change the window's title to the opened file's title. CString fileName = fileDlg.GetFileTitle (); SetWindowText(fileName); } }
下面来具体分析这个函数的参数。
第一个参数如果设置为TRUE,则代表打开一个对话框;若为FALSE,则是打开的是保存对话框;
第二个参数代表默认的文件扩展名,可以设为NULL;
第三个参数指定默认的文件名,可以设为NULL;
第四个参数指明特定的风格;
第五个参数指明可供选择的文件类型和相应的扩展名,具体的使用方法可以从上面的例子中看出。注意:最后的结尾是两道竖线。另外,还可以先定义一个字符串把所需要的文件后缀都写出来,然后再在使用时将该参数用字符串名来代替。方法如下:
static char BASED_CODE szFilter[] = "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";第六个参数为父窗口的指针。