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

wangweixing2000 alipay 技术经理  2006-04-05 05:52:30
想在一个矢量绘图控件添加上Undo/Redo功能,不知道有何好的方法?
希望大家给点想法,有成熟的代码更好,贴出来!
1、记录内存的变动情况,在每点存储当前内存的状态,codeproject上有篇讲的,但个人认为还是存在很多缺点
2、用mfc的doc来记录每个点,感觉也不行。
3、把每个对图元的操作封成对应的操作类(该类提供该操作的undo/redo功能),想法很好,但是这种操作太多,头大!
...
有什么好的想法share出来!哈哈,来者有分
...全文
412 点赞 收藏 12
写回复
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
回复 点赞
发动态
发帖子
ATL
创建于2007-09-28

3026

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告