注册 登录
编程论坛 VC++/MFC

yu版 再探讨一个话题 关于无限次撤销的问题(或者有限次)

wp231957 发布于 2013-08-15 13:15, 425 次点击
关于文本编辑框  的恢复上一次操作   (估计很少有编辑器能够实现无限次恢复上一次操作的吧)

这个是咋实现的  是放在文件中呢 还是放在数组里呢 还是注册表呢   没做过这个东东  不知道咋下手
4 回复
#2
yuccn2013-08-15 14:12
你是指Ctrl+Z事件吧?

不知道标准的做法是怎么样,不过可以看一下人家的开源软件,好像notepad++是开源的,把他的源代码拖下来慢慢参考就是。

我直接的想法是:做个内存链表(当然文件也可以)来保存每个操作之后的变化量;由于要实现Ctrl+Z (撤销)和Ctrl+y(恢复撤销),所以就用双向链表咯。
比如
link_head--> item[+XXXX]<-->item[-XXXXX]<->item[+XXXX]<-->item[+XXXX] <——link_tail

                                                            

在用一个Current_item 时刻指向链表的尾部,当相应Ctrl+Z或者Ctrl+Y的时候,用Current——item来浮动读取链表的状态咯。


实现细节上,可以还得考虑很多数据结构和算法问题,哈哈,这些是万版的工作了
#3
yuccn2013-08-15 14:14
哦,可能还是用数据来保存好点,用一个下标志来浮动就行。数据实现比链表简单点。

放注册表就不用了,麻烦。
#4
wp2319572013-08-15 14:22
唉  还是要用到链表  我对c中链表和双向链表  都是从未涉猎  遇到链表就躲  有多远躲多远
#5
yuccn2013-08-15 14:36
3楼打错了个词:数据-》数组。

“可能还是用数组来保存好点,用一个下标志来浮动就行。数组实现比链表简单点”


用多了就熟练了,刚刚工作那年,我们公司规定不用或者少用stl库。
那时候碰到不少东西都是自己写链表,写队列,树什么的。 碰多了就严谨点了
1