2023年7月17日发(作者:)
MFC实现⽂本⽂件的基本操作⼏乎每个软件都有"打开"、’'保存"的功能。以“记事本为打开功能”为例,其打开对话画框的界⾯如下://截图其保存对画框,与打开对话框界⾯基本⼀样,下⾯也给程序增加这样的对话框,我们可以使⽤提供的CFileDialog类来完成;CFileDialg类CFileDialog类封装了Windows常⽤的⽂件对话框。常⽤的⽂件对话框提供了⼀种简单的与Windows标准相⼀致的⽂件打开和⽂件存盘对话框功能,该类的派⽣层次如下:从上图中,可以看出这个类也是对话框的类,显⽰对话框可以使⽤DoModal函数来完成;要使⽤CFileDialog,需要先⽤CFileDialog构造函数构造⼀个对象,其构造函数如下:1234567参数:bOpenFileDialg1 如果为TRUE, 则创建⽂件打开对话框;如果为FALSE,则构造⼀个File Save As(另存为)对话框。
CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );lpszDefExt1 缺省⽂件扩展名,如果⽤户在⽂件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名⾃动加到⽂件名后。如果为NULL,则不添加扩展名。
lpszFileName1 初始显⽰于⽂件名编辑框中的⽂件名,如果为NULL,则不显⽰初始⽂件名。
dwFlags1 ⼀个或多个标志的组合,使你可定制对话框。如果你改变m_结构成员,在改变中⽤OR操作保持缺省⾏为完整。
lpszFilter1 ⼀列字符串对,指定可以应⽤到⽂件的过滤器。如果指定过滤器,仅被选择的⽂件显⽰于⽂件列表框中。pParentWnd1 指向⽂件对话框对象的⽗窗⼝或拥有者窗⼝。
其中lpszFilter是个很重要的⼀个参数,想要完成⽂件过滤显⽰功能,需要对这个参数进⾏赋值;其格式说明如下:双字符串的第⼀个字符串描述过滤器,第⼆个串表明使⽤的⽂件扩展名,多重扩展可⽤“;”来指定。字符串由两个“|”字符结尾;如果lpszFilter不是以默认构造形式赋值,⽽是通过m_lter形式赋值,我们需要将过滤器字符串中的“|”替换成”0“;形如:123CFileDialog fdlg(FALSE, NULL, _T("*.txt"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , _T("⽂本⽂件(*.txt)|*.txt|C++ source file(*.h; *.c; *.cpp)|*.h; *.c; *.cpp | 视频⽂件(*.avi) | *.avi | 所有⽂件(*.*) | *.* || "));
123456TCHAR szFilters[] =
"C++ source file(*.h;*,hpp;*.cpp)0*.h;*.hpp;*.cpp0" "Text File(*.txt)0*.txt0" "All Typle(*.*)0*.*0" "Lua source file(*.lua)0*.lua0" "0";如果想对对话框作更多定制,我们可通过成员数据m_ofn对对话框进⾏更多赋值,该参数是Windows OPENFILENAME结构,更多信息参照⽹上介绍OnBnClickedOpen()函数实现:添加控件后的事件82936373839464748495/*****************************************************************函数名称: 打开对话框*功 能: 打开选择的⽂本⽂件*作 者:kiki*⽇ 期:2019/5/7****************************************************************/void CDay506Dlg::OnBnClickedOpen(){ //定义⽂件对话框 CFileDialog fdlg(TRUE, NULL, _T("*.*"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , _T("⽂本⽂件(*.txt)|*.txt|视频⽂件(*.avi)|*.avi|所有⽂件(*.*)|*.*||")); if (IDCANCEL == l()) { return; } //读取当前对话框选择的⽂件路径 CString strPathName = hName(); //读取路径名到编辑框 SetDlgItemText(IDC_EDIT1, strPathName); //打开选择的⽂件 //构造⽂件,同时增加异常处理 CFile cFile; CFileException e; if (FALSE == (strPathName, CFile::modeRead,&e)) { CString strException; (_T("This file could not be openednt error code: %dn"), e.m_cause); MessageBox(strException, _T("kiki Tips:"), MB_OK | MB_ICONERROR); return; } //添加⼀个显⽰内容的编辑框 属性打开多⾏和垂直滚动显⽰ //读取打开的⽂件内容 DWORD dwCount, dwFilelenth = (DWORD)gth(); char* szBuffer = new char[dwFilelenth + 1]; ZeroMemory(szBuffer, dwFilelenth + 1); CString strContent; while (dwCount = (szBuffer, dwFilelenth)) { //拼接读取数据 strContent += szBuffer; } //字节转换 int len = WideCharToMultiByte(CP_UTF8, 0, strContent, gth(), NULL, NULL, NULL, NULL); char *pMulticharBuf = new char[len + 1]; ZeroMemory(pMulticharBuf, sizeof(char)*len); WideCharToMultiByte(CP_UTF8, 0, strContent,-1, pMulticharBuf, len, NULL, NULL); SetDlgItemText(IDC_EDIT2, strContent); (); delete[] szBuffer; szBuffer = nullptr;}OnBnClickedSaveAs()函数实现:8293637383940/*****************************************************************函数名称: save as 对话框*功 能: 另存⽂本⽂件*作 者:kiki*⽇ 期:2019/5/7****************************************************************/void CDay506Dlg::OnBnClickedSaveAs(){ // TODO: 在此添加控件通知处理程序代码 //save as dialog CFileDialog fdlg(FALSE, NULL, _T("*.txt"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , _T("⽂本⽂件(*.txt)|*.txt|C++ source file(*.h; *.c; *.cpp)|*.h; *.c; *.cpp | 视频⽂件(*.avi) | *.avi | 所有⽂件(*.*) | *.* || ")); if (IDCANCEL == l()) { return; } CString strPathName = hName(); //⽂件指针和异常 CFile cFile; CFileException e; //链接缓冲 CString strContent; //要写⼊字符串的长度 //GetDlgItemText(IDC_EDIT2, strContent); GetDlgItem(IDC_EDIT2)->GetWindowText(strContent); DWORD dwFilelenth = (DWORD)gth(); if (IDOK == (strPathName, CFile::modeCreate | CFile::modeReadWrite, &e)) { int len = WideCharToMultiByte(CP_ACP, 0, strContent, gth(), NULL, NULL, NULL, NULL); char *pMulticharBuf = new char[len+1]; ZeroMemory(pMulticharBuf, sizeof(char)*len); WideCharToMultiByte(CP_ACP, 0, strContent, gth(), pMulticharBuf, len, NULL, NULL); pMulticharBuf[len + 1] = '0'; (pMulticharBuf, len); (); } ();}OnBnClickedNewFile()函数实现:1718/*****************************************************************函数名称: New File对话框*功 能: 新建⽂本⽂件*作 者:kiki*⽇ 期:2019/5/7****************************************************************/void CDay506Dlg::OnBnClickedNewFile(){ // TODO: 在此添加控件通知处理程序代码 CString strException; (_T("A new file will be createdn")); MessageBox(strException, _T("kiki Tips:"), MB_OK); SetDlgItemText(IDC_EDIT1, NULL); SetDlgItemText(IDC_EDIT2, NULL); (_T("The new file was created successfully.n")); MessageBox(strException, _T("kiki Tips:"), MB_OK);}//打开//save as//新建基本功能就这,以后有时间了再丰富⼀下
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689609206a270315.html
评论列表(0条)