现正在编一图形CAD系统,其中一部分功能是绘制各种图元,例如圆,弧,五角星等,各种图元数据(即能决定该图元点的坐标)存储在其相应的数组(一种图元一个数组)中,问怎样实现系统的Undo、Redo功能?方法越简便越好,希望各位不吝赐教,谢谢!

解决方案 »

  1.   

    http://www.programfan.com/showarticle.asp?id=774
      

  2.   

    参考:
    http://www.codeproject.com/docview/undo.asp
    http://www.codeproject.com/docview/undoredo_demo.asp
      

  3.   

    to:hushuangyan74() 
      用堆栈的话,可否给一些思路。我程序里的存储结构比较凌乱。对一种图元来说,用一个数组存储它的关键点,另一个数组存储它的曲线段。这两个数组均放在Doc类里。to:kingzai(stevenzhu) 
      那网页里的方法是首先建立一个基类CEditRecord,对于每一种操作,都从该基类上派生出与操作相对应的类,记载操作过程,供以后进行具体的Undo/Redo操作。在我的程序里,我先建了个操作基类,对于每种图元都建了一个操作子类,例如绘制,删除,移动等。如果要加入Undo的话,则每种图元的Undo方法都不一样,那太麻烦了。我想的是对于任何图元都用一种方法来解决,不知道可不可以。关于vcleaner(我没做大哥已经很久了.......)的第一个链接里的Cundo类,不知大家有没有人用过?我放到我的工程里总会出错。如果有人用过,请赐教。to :pknife(小李飞刀)
      那本书,我正在找。呵呵,谢谢。
      
      

  4.   

    同上,使用Command 模式 既可。
    将每一个操作都抽象为一个Command对象
      

  5.   

    英文名:《Design Patterns》
    中文名:《设计模式可复用面向对象软件的基础》的书中有详细讲解
      

  6.   

    http://www.codeproject.com/docview/undoredo_demo.asp
    参考《设计模式可复用面向对象软件的基础>