描述:
想在一个矢量绘图控件添加上Undo/Redo功能,不知道有何好的方法?
希望大家给点想法,有成熟的代码更好,贴出来!
1、记录内存的变动情况,在每点存储当前内存的状态,codeproject上有篇讲的,但个人认为还是存在很多缺点
2、用mfc的doc来记录每个点,感觉也不行。
3、把每个对图元的操作封成对应的操作类(该类提供该操作的undo/redo功能),想法很好,但是这种操作太多,头大!
...
有什么好的想法share出来!哈哈,来者有分
解决方案1:
可以保存关键点信息?
这样保存的资源消耗或许会比较小,通过限制长度的两条链表保存每一次的改动,一条为UNDO,一条REDO,链表到长度限制时冲掉最旧的记录?
重绘可以根据比较当前和要操作的关键点对比(这样可能只需要保存修改部分关键点信息?)决定或者根据保存的关键点完全重绘.
不懂矢量绘图。但是关于Undo/Redo,请参照Command设计模式,希望有所帮助。
这里有C#代码示例:http://www.dofactory.com/Patterns/PatternCommand.aspx
mark
解决方案4:我们现在也是提供一个cUNDO基类,提供纯虚函数Undoaction,然后为每个操作派生cUNDO类,重载Undoaction函数.
解决方案5:网上有个imagestone和phoxo core library的库,核心的东西一样,实现了undo/redo,你下了代码看看
解决方案6:mark
解决方案7:http://www.codeproject.com/atl/undomgr.asp
解决方案8:记录内存的变动情况?Y?
解决方案9:我建议对操作进行记录,但是这要求封装统一,好处就是可以无限步Undo,前提是保存前不从物理设备删除数据,我研究arcgis的就是这样做