Undo/Redo功能该如何实现?找了很多办法,没有一个比较好的方案,希望能得到大家的指点。

wangweixing2000 2006-04-05 05:52:30
想在一个矢量绘图控件添加上Undo/Redo功能,不知道有何好的方法?
希望大家给点想法,有成熟的代码更好,贴出来!
1、记录内存的变动情况,在每点存储当前内存的状态,codeproject上有篇讲的,但个人认为还是存在很多缺点
2、用mfc的doc来记录每个点,感觉也不行。
3、把每个对图元的操作封成对应的操作类(该类提供该操作的undo/redo功能),想法很好,但是这种操作太多,头大!
...
有什么好的想法share出来!哈哈,来者有分
...全文
491 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyh12345 2006-04-06
  • 打赏
  • 举报
回复
mark
Kudeet 2006-04-06
  • 打赏
  • 举报
回复
我们现在也是提供一个cUNDO基类,提供纯虚函数Undoaction,然后为每个操作派生cUNDO类,重载Undoaction函数.
Kudeet 2006-04-06
  • 打赏
  • 举报
回复
网上有个imagestone和phoxo core library的库,核心的东西一样,实现了undo/redo,你下了代码看看
gufengduyu 2006-04-06
  • 打赏
  • 举报
回复
mark
wangweixing2000 2006-04-06
  • 打赏
  • 举报
回复
to jiangsheng
看过了,感觉它要依赖ole感觉不爽!昨晚终于找到了比较合适的办法,正在写,写好后会share给大家!哈哈!有什么好的想法大家继续!
具体想法,就是为每个操作封装一个可回退类,如果操作的参数相同呵呵我们就可以合并成一个。
非常感谢大家!
蒋晟 2006-04-06
  • 打赏
  • 举报
回复
http://www.codeproject.com/atl/undomgr.asp
wangweixing2000 2006-04-05
  • 打赏
  • 举报
回复
to wlwlxj
我的想法也是这样,统一设计比较复杂了,不知道哪里能有个例子看看!
wangweixing2000 2006-04-05
  • 打赏
  • 举报
回复
to DentistryDoctor
是的,有篇文章专门介绍这种记录内存变动实现的Undo/Redo。你在codeproject上搜Undo就可以找到那篇文章了!哈哈!
DentistryDoctor 2006-04-05
  • 打赏
  • 举报
回复
记录内存的变动情况?Y?
wlwlxj 2006-04-05
  • 打赏
  • 举报
回复
我建议对操作进行记录,但是这要求封装统一,好处就是可以无限步Undo,前提是保存前不从物理设备删除数据,我研究arcgis的就是这样做
MSDN3000 2006-04-05
  • 打赏
  • 举报
回复
可以保存关键点信息?

这样保存的资源消耗或许会比较小,通过限制长度的两条链表保存每一次的改动,一条为UNDO,一条REDO,链表到长度限制时冲掉最旧的记录?

重绘可以根据比较当前和要操作的关键点对比(这样可能只需要保存修改部分关键点信息?)决定或者根据保存的关键点完全重绘.
zcchm 2006-04-05
  • 打赏
  • 举报
回复
不懂矢量绘图。但是关于Undo/Redo,请参照Command设计模式,希望有所帮助。

这里有C#代码示例:http://www.dofactory.com/Patterns/PatternCommand.aspx

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧