本帖最后由 guo_linda 于 2010-07-19 18:04:53 编辑

解决方案 »

  1.   

    看看这几篇吧,也许会有帮助
    http://topic.csdn.net/t/20021115/20/1180794.htmlhttp://topic.csdn.net/t/20020715/11/874809.html
      

  2.   

    最简单的是用doc/view结构中的序列化,doc下有一个关于undo、redo的变量可以设置!不过,这样做的缺陷是,如果你的数据量大,那么,可能占用空间挺多的;
    好的作法是自己实现一个,每次改变数据,都带有数据的改变,这样做的好处是,只保存改变的部分,但是,不好的地方是,每种操作都要自己做!
    如果没有搞过,建议就用最简单的序列化吧,反正现在机器配置都挺好!
      

  3.   

    参考设计模式中的command
    http://www.cnblogs.com/k-sharp/archive/2010/06/25/1765191.html
      

  4.   

    最好使用Command模式,不同的操作,都做成一个具体的Command来处理。
    比如移动 就是一个 MoveCommand,删除就是DeleteCommand。这些Command都有一个基类Command,这个基类必须有2个方法Execute(执行命令),UnExecute(撤销命令的执行)。我以Move Command为例,Move的时候,你必须知道的事这个操作所影响到的对象。比如你的图形对象叫做ShapeComponent(及其派生类)。Move的时候,你需要new 一个MoveCommand,然后设置影响到的Shape对象和Move的Offset。 写MoveCommand的Execute方法,让Shape对象Offset 一个位移。UnExecute的时候,就Offset (0-位移)。所有的Command都记录在Document 这个类中。 可以用两个Stack来保存,UndoStack与RedoStack。
    当你Execute了一个Command后,加这个Command到UndoStack。
    Undo的时候,从UndoStack Pop一个Command执行UnExecute,然后将此Command加入到RedoStack。
    当Redo一个Command时,首先从Redo Stack中Pop栈顶Command,调用此Command的Execute方法,然后将此Command加入Undo Stack。