程序临近收工,当时夸下的海口一个一个都在完善。唯一让我耿耿于怀的就是程序的撤销/恢复功能。程序里有一个listctrl控件,对它进行编辑、删除、导入的操作,如何实现撤销/恢复?我有两个思路:
1:每次操作前保存listctrl内容,写文件。通过读写文件实现撤销/恢复功能;
2:用CArray记录下每次操作的行的内容。要撤销/恢复,读CArray数组就行了。各位大虾还有其它好点子没?一起讨论一下?
1:每次操作前保存listctrl内容,写文件。通过读写文件实现撤销/恢复功能;
2:用CArray记录下每次操作的行的内容。要撤销/恢复,读CArray数组就行了。各位大虾还有其它好点子没?一起讨论一下?
解决方案 »
- QQ状态自动改成离开状态是怎么实现的?
- CPtrArray 如何删除指针所引用的实体
- 3D骨架提取 急!急!急!
- 求助:cmd2cmd,用ping包来传输telnet命令
- 切分视图后,怎么实现左边的视图有属性页的效果??
- 100分送了---自动化操作中关于模板中如何得到行,列数呢?
- 如何判别一个目录是否存在,如果不存在就创建
- 【求助】如何打造在win32和win64同时可运行的代码?
- SDK编程里边WM_COMMAND消息的lParam和wParam有没有高、低字组?wParam有。
- 关于运算符重载的问题
- 侯捷老师最近两年怎么不见了
- vc6.0+DataGrid + Access,如何获取DataGrid的表名?
然后设置一个操作的index,undo就-1,redo就+1
用个循环跑到链表末尾,再逐个倒序free()?
至于恢复,主要是思路有些乱。
假如说,现在
1添加一行数据,得到状态a;表格内容现在是1
2再添加一行数据,得到状态b;表格内容现在是1,2
3又添加一行数据,得到状态c;表格内容现在是1,2,3
4删除最后一行数据,得到状态d;表格内容现在是1,2
5在删除最后一行数据,得到状态e;表格内容现在是1现在状态是e,执行撤销:
6执行一次,得到状态d。表格内容现在是1,2
7执行第2次,得到状态c;表格内容现在是1,2,38现在进行删除,得到状态f;表格内容现在是1,29好了,现在进行撤销操作,得到状态c;表格变为1,2,3
那么,现在能执行恢复吗,恢复到什么状态?
10 如果第9步是撤销,现在继续撤销,得到的状态是??昏厥,思路非常乱~
class base
{
virtual undo();
virtual redo();
}
class Del:public base
{
数据:
删除前的数据
行号
....
操作:
undo();
redo();
}
class Mod:public base
{
数据:
修正前的数据
修正后的数据
行号
...
操作:
undo();
redo();
}定义一个履历类,存放上面的类指针
class History
{
CList<base*,base*> cUndo;
Clist<base*,base*> cRedo
Add(base *pbase );
}Undo操作:从cUndo中取指针调用 pOper->undo();
Redo操作:从cRedo中取指针调用 pOper->redo();