编程论坛
注册
登录
编程论坛
→
VC++/MFC
yu版 再探讨一个话题 关于无限次撤销的问题(或者有限次)
wp231957
发布于 2013-08-15 13:15, 425 次点击
关于文本编辑框 的恢复上一次操作 (估计很少有编辑器能够实现无限次恢复上一次操作的吧)
这个是咋实现的 是放在文件中呢 还是放在数组里呢 还是注册表呢 没做过这个东东 不知道咋下手
4 回复
#2
yuccn
2013-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
yuccn
2013-08-15 14:14
哦,可能还是用数据来保存好点,用一个下标志来浮动就行。数据实现比链表简单点。
放注册表就不用了,麻烦。
#4
wp231957
2013-08-15 14:22
唉 还是要用到链表 我对c中链表和双向链表 都是从未涉猎 遇到链表就躲 有多远躲多远
#5
yuccn
2013-08-15 14:36
3楼打错了个词:数据-》数组。
“可能还是用数组来保存好点,用一个下标志来浮动就行。数组实现比链表简单点”
用多了就熟练了,刚刚工作那年,我们公司规定不用或者少用stl库。
那时候碰到不少东西都是自己写链表,写队列,树什么的。 碰多了就严谨点了
1