工控编程吧
标题:
182上位机VC MFC使用临时文件实现重做UNDO及REDO功能
[打印本页]
作者:
qq263946146
时间:
2016-1-19 21:46
标题:
182上位机VC MFC使用临时文件实现重做UNDO及REDO功能
(, 下载次数: 1)
上传
点击文件名下载附件
182上位机VC MFC使用临时文件实现重做UNDO及REDO功能
功能展示
在编辑文件时都有可能会出错,就得返回重做,我们当前例程通过创建几个临时文件实现重做UNDO及REDO功能,向编辑框输入内容,点击UDDO可返回前次输入内容;效果如图;
要点提示
临时文件是存放在系统目录下的临时使用的文件,临时文件的目录可以用函数GetTempPath();
临时文件名的获取可以用函数GetTempFileName();
然后是文件是创建,用类Cfile实现;
实现功能
1.新建基于对话框的应用程序
2.拖拽一编辑框ID为IDC_EDIT1,用于输入文本;
拖拽两按钮控件,关联函数用于实现向前重做,退后重做;
3.添加三变量private: CStringList m_sPathList
OSITION 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();
复制代码
4实现两按钮的功能,与编辑框内容改变的触发函数
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();
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/3b7138fceed4d15290dd4e6b77988fb9/0/0/w_19rtejtqvl.swf-albumId=5226286909-tvId=5226286909-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4