c语言夜未眠2——实现撤销和重做
来源:互联网 发布:今日股市数据 编辑:程序博客网 时间:2024/06/06 03:50
撤销和重做
一般来说,编辑操作的软件都有撤销和重做的功能。
首先要明白,这究竟是怎样的一个功能。那word来说把,我们连续输入三个字,然后可以撤销3次,再可以重做3次,在未输入之前,是不能撤销和重做的。然后你输入了,这时可以撤销了,但仍然不能重做。也就是说,只有你撤销后才可以重做。但是不是你撤销多少次就可以重做多少次呢,这要看是不是紧接着做完撤销就重做。例如,当你撤销三个字之后,你紧接着输入一个字,此时并不能进行重做操作。不会因为你之前撤销过三次就可以重做三次,事实上,当你撤销三次后,确实可以重做三次,但一定是紧接着进行的,而且重做的次数是当前撤销的次数,和之前的撤销次数没有任何关系。在不考虑撤销次数限制的情况下,当前有多少文字就可以撤销多少次。重做和输入都可以增加撤销数,而只有撤销可以增加重做数。但输入时,重做数为0。
Ok,明白以上特点后,就可以来实现撤销和重做了。可以看到,后输入的将先撤销,后撤销的将先重做。数据结构就是栈。因此我们可以创建一个最多可以连续撤销100次的栈,名为record[100]。Top为栈顶指针。初始值为-1。接下来就是定义两个变量,分别为undoNum,redoNum。分别表示可撤销次数和重做次数。
接下来就是写三个重要的函数,分别为AddRecord(),Undo(),Redo();
当我们添加内容时,同时也向栈中添加,调用AddRecord函数,栈顶指针,undoNum都增加。
top = (top >= 99)? 0: ++top;
undoNum = (undoNum >=100) ? 100:++undoNum;
因为一旦有输入,就不可以重做了,因此, 我们可以在这里让redoNum = 0;
当undo时,栈顶指针下移,可撤销次数减少。同时重做次数增加。
Redo时,undoNum次数又增加,但有一点要注意,如果redoNum= 0写在了AddRecord()里,那么redo时不要调用该函数,否则你不管撤销多少次,你只能重做一次。
一个简单的撤销和重做就这样实现了。我现在也是一个初学编程的人。欢迎大家来交流。
我的blog:http://blog.csdn.net/booirror
我的邮箱:booirror@163.com
- c语言夜未眠2——实现撤销和重做
- 撤销和重做(Undo和Redo)(2)
- 重做(redo)和撤销(undo)的完整实现
- Android:基于EditText实现撤销和重做机制
- Command模式实现撤销重做(Undo/Redo)
- 涂鸦撤销与重做的功能实现
- Command模式实现撤销重做(Undo/Redo)
- View实现涂鸦、撤销以及重做功能
- OpenCasCade的撤销和重做机制
- 使用 NSUndoManager 来进行撤销和重做
- 图像的单步撤销和重做怎么实现,如何记录状态
- 撤销(undo)和重做(redo)的C++完美实现
- WPF和Silverlight的撤销和重做框架
- 命令模式+备忘录模式,实现可撤销重做的计算器
- Android简单涂鸦以及撤销、重做的实现方法
- 自己动手设计代码编辑器——(三)撤销与重做
- [dhtmlxGantt(甘特图)开发手册]第四篇——撤销/重做、提示消息、加载任务
- [Vim]撤销与重做
- Java类7大基本设计潜规则 ——潜规则在于你可以不遵守,但一定要付出代价
- Android 4.0 开机启动后接受不到android.permission.RECEIVE_BOOT_COMPLETED 广播
- jdk与jre的区别
- 用cocos2d-x做一个简单的windows phone 7游戏:更猛的怪兽和更多的关卡(三)
- ORA-22285: 对不存在的目录或文件进行 FILEOPEN 操作 ORA-06512: 在 "SYS.DBMS_LOB", line 523 ORA-06512: 在 line 6 查看错误堆
- c语言夜未眠2——实现撤销和重做
- 使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序
- posix 线程(2)信号量同步
- UNP函数笔记十六: 线程
- 最大值最小化
- matlab坐标轴的设置
- Struts2 自定义拦截器 实现简单权限检查
- 如何使用真机调试Android应用
- struts2 常用迭代判断标签