182上位机VC MFC使用临时文件实现重做UNDO及REDO功能
182上位机VC MFC使用临时文件实现重做UNDO及REDO功能 功能展示 在编辑文件时都有可能会出错,就得返回重做,我们当前例程通过创建几个临时文件实现重做UNDO及REDO功能,向编辑框输入内容,点击UDDO可返回前次输入内容;效果如图; 要点提示 临时文件是存放在系统目录下的临时使用的文件,临时文件的目录可以用函数GetTempPath(); 临时文件名的获取可以用函数GetTempFileName(); 然后是文件是创建,用类Cfile实现; 实现功能 1.新建基于对话框的应用程序 2.拖拽一编辑框ID为IDC_EDIT1,用于输入文本; 拖拽两按钮控件,关联函数用于实现向前重做,退后重做; 3.添加三变量private: CStringList m_sPathListOSITION m_PathPos; UINT m_nTempFileNum;在OnInitDialog()中初始化 - //><
- m_nTempFileNum = 5;
- TCHAR szTempPath[MAX_PATH];
- DWORD dwResult=::GetTempPath(MAX_PATH, szTempPath);
- ASSERT (dwResult);
- TCHAR szTempFile[MAX_PATH];
- for(UINT i=1;i<m_nTempFileNum+1;i++)
- {
- GetTempFileName(szTempPath, _T ("~工控"),i,szTempFile);
- CFile MyFile(szTempFile,CFile::modeCreate|CFile::modeWrite);
- MyFile.Close();
- m_sPathList.AddHead(CString(szTempFile));
- }
- m_PathPos = m_sPathList.GetHeadPosition();
复制代码- void CGkbc8Dlg::OnUndo()
- {
- CString sFileName;
- POSITION pos=m_PathPos;
- m_sPathList.GetPrev(pos);
- m_PathPos = pos;
- if(!m_PathPos)
- {
- m_PathPos = m_sPathList.GetTailPosition();
- pos = m_PathPos;
- }
- sFileName = m_sPathList.GetPrev(pos);
- if(sFileName.IsEmpty())
- return;
- CFile File(sFileName,CFile::modeRead);
- char buf[1000];
- ZeroMemory(buf,1000);
- File.Read(buf,999);
- File.Close();
- SetDlgItemText(IDC_EDIT1,buf);
- }
- void CGkbc8Dlg::OnRedo()
- {
- CString sFileName;
- POSITION pos=m_PathPos;
- m_sPathList.GetNext(pos);
- m_PathPos = pos;
- if(!m_PathPos)
- {
- m_PathPos = m_sPathList.GetHeadPosition();
- pos = m_PathPos;
- }
- sFileName = m_sPathList.GetNext(pos);
-
复制代码- if(sFileName.IsEmpty())
- return;
- CFile File(sFileName,CFile::modeRead);
- char buf[1000];
- ZeroMemory(buf,1000);
- File.Read(buf,999);
- File.Close();
- SetDlgItemText(IDC_EDIT1,buf);
- }
- CString sFileName;
- POSITION pos=m_PathPos;
- m_sPathList.GetNext(pos);
- m_PathPos = pos;
- if(!m_PathPos)
- {
- m_PathPos = m_sPathList.GetHeadPosition();
- pos =m_PathPos;
- }
- sFileName=m_sPathList.GetNext(pos);
- //
- if(sFileName.IsEmpty())
- return;
- CFile File;
- if(!File.Open(sFileName,CFile::modeWrite,NULL))
- {
- MessageBox("打开文件操作失败","信息提示",MB_OK);
- return;
- }
- CString sText;
- GetDlgItemText(IDC_EDIT1,sText);
- File.Write(sText,sText.GetLength());
- File.Close();
复制代码我们来演示下功能实现的整个过程
|