class IOpt
{public:virtual void Undo() = 0; //撤销virtual void Redo() = 0; //重做
}
class CDelOpt:public IOpt
{
public:void Undo(); //撤销, 把图形重新放回链表void Redo(); //重做, 把图形从链表删除private:IShape* m_pDelShape;  int m_nPos;CList<IShape*>* m_pLstShapes;
}
class CRotateOpt:public IOpt
{
public:void Undo(); //撤销, 还原原来的坐标点void Redo(); //重做, 改成旋转后的坐标点private:IShape* m_pDelShape;  CPoint m_ptBenginOld;CPoint m_ptEndOld;CPoint m_ptBenginNew;CPoint m_ptEndNew;}

数据结构

操作 栈 栈

增加图形1 增加图形1

增加图形2 增加图形1 增加图形2

移动图形1 增加图形1 增加图形2 移动图形1

删除图形2 增加图形1 增加图形2 移动图形1 删除图形2

撤销 增加图形1 增加图形2 移动图形1 删除图形2

撤销 增加图形1 增加图形2 删除图形2 移动图形1

撤销 增加图形1 删除图形2 移动图形1 增加图形2

重做 增加图形1 增加图形2 删除图形2 移动图形1

重做 增加图形1 增加图形2 移动图形1 删除图形2

撤销 增加图形1 增加图形2 删除图形2 移动图形1

class ICommand
{public:virtual void UnExcute() = 0; //撤销,反执行virtual void Excute() = 0; //重做,执行
}

day8 – CAD 撤销重做相关推荐

  1. 实现编辑功能有哪几个action_Web 应用的撤销重做实现

    背景 前不久,我参与开发了团队中的一个 web 应用,其中的一个页面操作如下图所示: GIF 这个制作间页面有着类似 PPT 的交互:从左侧的工具栏中选择元素放入中间的画布.在画布中可以删除.操作(拖 ...

  2. Mac OS开发—Xcode给Mac应用添加编辑快捷键(剪切 复制 粘贴 全选 删除 撤销 重做)功能

    前言 笔者做Windows开发的,无奈公司有Mac OS的项目需要维护,之前没有编辑菜单的功能,需要笔者加上这个功能,笔者只能硬着头皮上.还好会c++,Mac应用里面一般都会用object-c 也可以 ...

  3. 用dw 删除重复html文件,Dreamweaver怎么撤销重做,DW怎么返回上一步,看完就明白了...

    编辑代码难免会出错,还好现在的软件都有返回或者重做的命令.那么Dreamweaver怎么撤销重做,DW怎么返回上一步呢?来看看小编为您介绍的文章吧. 工具/材料 Dreamweaver CS6 htm ...

  4. android 自定义画笔,在Android Canvas中使用撤销/重做操作的自定义画笔

    我想使用自定义画笔&撤消/重做操作实现画布绘制应用程序.首先,我的代码完美工作,无需使用自定义画笔(包括撤消/重做操作).根据这个答案How to make custom brush for ...

  5. 游戏开发中如何设计一个撤销重做系统DoUnDo

    我现在负责做捏脸的模块,其中需要做撤销重做,老实说上一次做还是大学的时候做绘图程序有用到过,那个时候就是简单用了一个栈来操作.当时的一个核心思想是不管你绘制的是矩形.三角形.还是什么形状,底层他们都有 ...

  6. C# wpf 实现自定义撤销重做功能

    文章目录 前言 一.具体实现 1.完整代码 二.使用示例 1.拖动控件 (1)MainWindow.xaml (2)MainWindow.xaml.cs (3)效果预览 总结 前言 做wpf界面的时候 ...

  7. C++ 实现自定义撤销重做功能

    文章目录 前言 一.完整代码 二.使用示例 1.基本用法 2.gdi画线撤销 总结 前言 在使用c++做界面开发的时候,需要涉及到到撤销重做操作,尤其是实现白板功能时需要自己实现一套撤销重做功能,如果 ...

  8. CAD误操作怎么办?CAD撤销快捷键、CAD自动保存…

    在使用CAD软件进行设计制图时,难免会出现各种CAD误操作的情况,轻则需要撤销错误命令.重新编辑设计元素,重则出现CAD异常关闭,导致一天的活儿白干了. 那么如何快速解决CAD误操作问题,及时拯救加班 ...

  9. linux vi 撤销重做于前进后退--转

    在vi中按u可以撤销一次操作 u   撤销上一步的操作 Ctrl+r 恢复上一步被撤销的操作 注意: 如果你输入"u"两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式 ...

最新文章

  1. linux下mysql日志配置_Linux下MySQL 5.5.21 服务器日志配置
  2. 一文盘点2019年AI领域都发生了什么
  3. shell公共函数:/etc/init.d/functions
  4. 人人都要学一点深度学习(1)- 为什么我们需要它
  5. 【tensorflow】重置/清除计算图
  6. PHP中预定义的超全局数组
  7. WiFi 热点共享设置
  8. linux c之信号signal处理机制
  9. 记一次 OOM 的原因和处理 出现大量 close_wait,项目无法访问 activeMq和 poi 出现的 OOM
  10. 【OpenCV 例程200篇】71. 连续函数的取样
  11. npm 私有库开源组件_苹果的ResearchKit,npm私有模块以及更多开源新闻
  12. 你是农村人吗,小时候放过牛吗,都有哪些好玩的趣事?
  13. cnn 回归 坐标 特征图_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
  14. 5个被忽视的习惯,决定了你无法成为高级开发工程师
  15. uni-app 跨端开发注意事项
  16. inPixio Photo Studio 11(图片编辑软件)官方正式版V11.0.7709.20526 | 超好用的图片编辑器
  17. 解决win10桌面图标和任务栏图标一直闪烁
  18. 数据库周刊40丨OceanBase官网上线开发者社区;人民日报关注易鲸捷;2020中国系统架构师大会10月线上召开;数据库迁移经验分享;MySQL大表超字段问题;SQL高级知识;Oracle等待事件
  19. NVI(Non-Virtual Interface)手法
  20. 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点

热门文章

  1. 解决远程访问虚拟机mysql失败问题
  2. 如何在计算机上新建硬盘,我想在计算机上添加另一个硬盘,我该如何设置?
  3. jQuery写个扭蛋机的抽奖
  4. ModifyMenu
  5. C++学习--static函数,内联(inline)函数, 友元 (friend) 函数
  6. Windows小知识(一)——加装固态硬盘,重装系统win10,固态硬盘分区,键盘混乱解决办法
  7. 【react】配置React 的开发环境
  8. idea怎么设置自动导入包(亲测)
  9. html 原型图片,可视化的JavaScript:原型继承(动图演示)
  10. 聚合数据短信验证码接口实现 Android开发短信验证码