6.7 Windows通用对话框
教学录像:光盘\TM\lx\6\Windows通用对话框.exe
Windows通用对话框是由操作系统提供的任何应用程序都可获得的对话框。在Visual C++(www.cppentry.com)中,对这些对话框进行了封装,使用户在开发程序时可以方便地调用这些对话框。不过Windows通用对话框从用户处获取消息,返回相应的消息,但不进行消息处理,如果用户要进行更进一步的处理,还需要自行为进一步的处理添加代码。下面就来介绍一下通用对话框的应用。
6.7.1 使用"文件"对话框打开和保存文件
"文件"对话框为打开和保存文件提供了一个方便的接口,在MFC中CFileDialog类对"文件"对话框进行了封装。
使用"文件"对话框时要创建一个"文件"对话框对象,通过构造函数进行初始化。
语法格式如下:
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL,CWnd* pParentWnd = NULL ); |
CFileDialog构造函数中的参数说明如表6.4所示。
表6.4 CFileDialog构造函数中的参数说明
|
参 数< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
描 述 |
|
bOpenFileDialog |
如果值为TRUE,构造“打开”对话框; 为FALSE,构造“另存为”对话框 |
|
lpszDefExt |
用于确定文件默认的扩展名,如果为NULL, 没有扩展名被插入到文件名中 |
|
lpszFileName |
确定编辑框中初始化时的文件名称,如果为NULL, 编辑框中没有文件名称 |
|
dwFlags |
用于自定义“文件”对话框 |
|
lpszFilter |
用于指定对话框过滤的文件类型 |
|
pParentWnd |
标识“文件”对话框的父窗口指针 |
说明:lpszFilter参数格式:文件类型说明和扩展名间用"|"分隔,每种文件类型间用"|"分隔,末尾用"||"结束。
在使用"文件"对话框时,还需要通过"文件"对话框的一些常用函数来实现用户需要的功能。"文件"对话框的常用函数如表6.5所示。
表6.5 "文件"对话框的常用函数
|
函 数 |
功 能 描 述 |
|
DoModal |
用于显示“文件”对话框,供用户选择文件 |
|
GetPathName |
用于返回用户选择文件的完整路径,包括文件的路径、 文件名和文件扩展名 |
|
GetFileName |
用于返回用户选择的文件名称,包括文件名和扩展名, 但不包含路径 |
|
GetFileExt |
用于返回“文件”对话框中输入的文件扩展名 |
|
GetFileTitle |
用于返回“文件”对话框中输入的文件名称, 不包含路径和扩展名 |
|
OnFileNameOK |
用于检查“文件”名称是否正确 |
例6.6 下面使用"文件"对话框打开和保存文件。程序设计步骤如下:(实例位置:光盘\TM\sl\6\2)
(1)创建一个基于对话框的应用程序,将对话框的Caption属性修改为"使用'文件'对话框打开和保存文件"。
(2)向对话框中添加两个静态文本控件、一个编辑框控件和两个按钮控件。
(3)处理"打开"按钮的单击事件,在静态正文中显示文件路径,在编辑框中显示文件内容。代码如下:
void CFileDialogDlg::OnOpen() //"打开"按钮单击事件处理函数 { CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd()); //构造文件打开对话框 CString strPath,strText=""; //声明变量 if(dlg.DoModal() == IDOK) //判断是否按下"打开"按钮 { strPath = dlg.GetPathName(); //获得文件路径 m_OpenPath.SetWindowText(strPath); //显示文件路径 CFile file(strPath,CFile::modeRead); //打开文件 char read[10000]; //声明字符数组 file.Read(read,10000); //读取文件内容 for(int i=0;i<file.GetLength();i++) //根据文件大小设置循环体 { strText += read[i]; //为字符串赋值 } file.Close(); //关闭文件 m_FileText.SetWindowText(strText); //显示文件内容 } } |
(4)处理"保存"按钮的单击事件,在静态正文中显示文件路径,将编辑框中的内容保存到文件中。代码如下。
void CFileDialogDlg::OnSave() //"打开"按钮单击事件处理函数 { CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd()); //构造文件另存为对话框 CString strPath,strText=""; //声明变量 char write[10000]; //声明字符数组 if(dlg.DoModal() == IDOK) //判断是否按下"保存"按钮 { strPath = dlg.GetPathName(); //获得文件保存路径 if(strPath.Right(4) != ".TXT") //判断文件扩展名 strPath += ".TXT"; //设置文件扩展名 m_SavePath.SetWindowText(strPath); //显示文件路径 CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite); //创建文件 m_FileText.GetWindowText(strText); //获得编辑框中内容 strcpy(write,strText); //将字符串复制到字符数组中 file.Write(write,strText.GetLength()); //向文件中写入数据 file.Close(); //关闭文件 } }
|
实例的运行结果如图6.25所示。
|
| 图6.25 "文件"对话框打开和保存文件 |
【责任编辑:
夏书 TEL:(010)68476606】