您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > VS2010MFC编程入门之十七(对话框文件对话框)
上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框。文件对话框也是很常用的一类对话框。文件对话框的分类文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个对话框,让我们选择要打开文件的路径,这个对话框就是打开文件对话框;除了“打开”选项一般还会有“另存为”选项,选择“另存为”后往往也会有一个对话框弹出,让我们选择保存路径,这就是保存文件对话框。正如上面举例说明的,打开文件对话框用于选择要打开的文件的路径,保存文件对话框用来选择要保存的文件的路径。文件对话框类CFileDialogMFC使用文件对话框类CFileDialog封装了对文件对话框的操作。CFileDialog类的构造函数原型如下:explicitCFileDialog(BOOLbOpenFileDialog,LPCTSTRlpszDefExt=NULL,LPCTSTRlpszFileName=NULL,DWORDdwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTRlpszFilter=NULL,CWnd*pParentWnd=NULL,DWORDdwSize=0,BOOLbVistaStyle=TRUE);参数说明:bOpenFileDialog:指定要创建的文件对话框的类型。设为TRUE将创建打开文件对话框,否则将创建保存文件对话框。lpszDefExt:默认的文件扩展名。如果用户在文件名编辑框中没有输入扩展名,则由lpszDefExt指定的扩展名将被自动添加到文件名后。默认为NULL。lpszFileName:文件名编辑框中显示的初始文件名。如果为NULL,则不显示初始文件名。dwFlags:文件对话框的属性,可以是一个值也可以是多个值的组合。关于属性值的定义,可以在MSDN中查找结构体OPENFILENAME,元素Flags的说明中包含了所有属性值。默认为OFN_HIDEREADONLY和OFN_OVERWRITEPROMPT的组合,OFN_HIDEREADONLY表示隐藏文件对话框上的“ReadOnly”复选框,OFN_OVERWRITEPROMPT表示在保存文件对话框中如果你选择的文件存在了,就弹出一个消息对话框,要求确定是否要覆盖此文件。lpszFilter:文件过滤器,它是由若干字符串对组成的一个字符串序列。如果指定了文件过滤器,则文件对话框中只有符合过滤条件的文件显示在文件列表中待选择。给大家看看VS2010MSDN中给出的一个例子:staticTCHARBASED_CODEszFilter[]=_T(ChartFiles(*.xlc)|*.xlc|WorksheetFiles(*.xls)|*.xls|DataFiles(*.xlc;*.xls)|*.xlc;*.xls|AllFiles(*.*)|*.*||);这样设置过滤器以后,文件对话框的扩展名组合框中将有四个选项:ChartFiles(*.xlc)、WorksheetFiles(*.xls)、DataFiles(*.xlc;*.xls)和AllFiles(*.*),大家可以看到每种文件的扩展名规定都是一个字符串对,例如ChartFiles的过滤字符串是ChartFiles(*.xlc)和*.xlc成对出现的。pParentWnd:文件对话框的父窗口的指针。dwSize:OPENFILENAME结构体的大小。不同的操作系统对应不同的dwSize值。MFC通过此参数决定文件对话框的适当类型(例如,创建Windows2000文件对话框还是XP文件对话框)。默认为0,表示MFC将根据程序运行的操作系统版本来决定使用哪种文件对话框。bVistaStyle:指定文件对话框的风格,设为TRUE则使用Vista风格的文件对话框,否则使用旧版本的文件对话框。此参数仅在WindowsVista中编译时适用。文件对话框也是模态对话框,所以在打开时也需要调用CFileDialog类的DoModal()成员函数。在打开文件对话框中点了“打开”或者在保存文件对话框中点了“保存”以后,我们可以使用CFileDialog类的成员函数GetPathName()获取选择的文件路径。下面列出几个CFileDialog类的成员函数,我们可以使用它们获得文件对话框中的各种选择。GetFileExt():获得选定文件的后缀名。GetFileName():获得选定文件的名称,包括后缀名。GetFileTitle():获得选定文件的标题,即不包括后缀名。GetFolderPath():获得选定文件的目录。GetNextPathName():获得下一个选定的文件的路径全名。GetPathName():获得选定文件的路径全名。GetReadOnlyPref():获得是否“以只读方式打开”。GetStartPosition():获得文件名列表中的第一个元素的位置。文件对话框实例根据前面所讲内容,鸡啄米给大家做个文件对话框实例。1.创建一个基于对话框的MFC应用程序工程,名称设为“Example17”。2.修改主对话框IDD_EXAMPLE17_DIALOG的模板,删除自动生成的“TODO:Placedialogcontrolshere.”静态文本框,添加两个编辑框,ID分别为IDC_OPEN_EDIT和IDC_SAVE_EDIT,再添加两个按钮,ID分别设为IDC_OPEN_BUTTON和IDC_SAVE_BUTTON,Caption分别设为“打开”和“保存”。按钮IDC_OPEN_BUTTON用于显示打开文件对话框,编辑框IDC_OPEN_EDIT显示在打开文件对话框中选择的文件路径。按钮IDC_SAVE_BUTTON用于显示保存文件对话框,编辑框IDC_SAVE_BUTTON显示在保存文件对话框中选择的文件路径。3.分别为按钮IDC_OPEN_BUTTON和IDC_SAVE_BUTTON添加点击消息的消息处理函数CExample17Dlg::OnBnClickedOpenButton()和CExample17Dlg::OnBnClickedSaveButton()。4.修改两个消息处理函数如下:C++代码1.voidCExample17Dlg::OnBnClickedOpenButton()2.{3.//TODO:Addyourcontrolnotificationhandlercodehere4.//设置过滤器5.TCHARszFilter[]=_T(文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||);6.//构造打开文件对话框7.CFileDialogfileDlg(TRUE,_T(txt),NULL,0,szFilter,this);8.CStringstrFilePath;9.10.//显示打开文件对话框11.if(IDOK==fileDlg.DoModal())12.{13.//如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里14.strFilePath=fileDlg.GetPathName();15.SetDlgItemText(IDC_OPEN_EDIT,strFilePath);16.}17.}18.19.20.voidCExample17Dlg::OnBnClickedSaveButton()21.{22.//TODO:Addyourcontrolnotificationhandlercodehere23.//设置过滤器24.TCHARszFilter[]=_T(文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||);25.//构造保存文件对话框26.CFileDialogfileDlg(FALSE,_T(doc),_T(my),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,this);27.CStringstrFilePath;28.29.//显示保存文件对话框30.if(IDOK==fileDlg.DoModal())31.{32.//如果点击了文件对话框上的“保存”按钮,则将选择的文件路径显示到编辑框里33.strFilePath=fileDlg.GetPathName();34.SetDlgItemText(IDC_SAVE_EDIT,strFilePath);35.}36.}上面显示编辑框内容时,鸡啄米使用了WindowsAPI函数SetDlgItemText,当然也可以先给编辑框关联变量,然后再使用鸡啄米在创建对话框类和添加控件变量中介绍的CDialogEx::UpdateData()函数,但是鸡啄米比较习惯使用SetDlgItemText函数,感觉比较灵活。5.运行此程序,在结果对话框上点“打开”按钮,显示打开文件对话框如下:点“保存”按钮后,显示保存文件对话框:在打开文件对话框和保存文件对话框都选择了文件路径后,主对话框如下:到此,文件对话框就讲完了,是不是依然很简单?如果忘记了文件对话框类构造函数的参数意义,可以回到鸡啄米来看看或者在MSDN上查阅。
本文标题:VS2010MFC编程入门之十七(对话框文件对话框)
链接地址:https://www.777doc.com/doc-2866764 .html