c++ - Visual C++ 撤消和重做操作

标签 c++ visual-c++ c++-cli undo-redo

我有一个相当大的应用程序,我想用 Visual-C++ 制作,现在我想添加撤消/重做功能。

有相当多的事件(按钮点击、标签文本更改等),我想找到一种方法来撤消/重做而不向每个函数添加代码。 例如,我想要一个可以读取每个完成的事件并自动存储它的类。然后在我的撤消/重做事件中,我可以只存储最新的操作。

如果那不可能,我不介意其他方式。

有什么帮助吗?

最佳答案

声明一个表示两个操作的类 - 撤消和重做。 同时创建该类的两个 vector 。

对于您要应用撤消/重做的每个操作,将该类的一个实例压入撤消 vector 。派生类的数量应该与要撤消的操作数量一样多。

例如,如果单击按钮将背景绘制为绿色,您将创建一个类实例,其撤消方法将背景绘制为之前的颜色,其重做方法将背景绘制为绿色,并将其填充到撤消 vector 中。 当你撤消时 - 你弹出最后一个类实例并调用它的撤消方法,这会将背景绘制为以前的颜色。然后将其推送到重做 vector 。

当你重做时,你弹出顶部类实例的重做 vector 并调用它的重做方法,它们将它填充回撤消 vector 。

有一些极端情况(边界),您会在遇到时解决它们.. :-)

关于c++ - Visual C++ 撤消和重做操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10367544/

相关文章:

c++ - 如何在C++中正确地在循环中使用互斥锁?

c++ - 使用 MSVC 2015 构建时出现链接器错误(其他 CC 都可以)

c++ - 如果异常被禁用,所有功能都是 "noexcept"吗?

c++ - 智能相机和图像处理

c++ - C++ 中的 Glob 并打印结果

c++ - cvRound() 中的 x64 舍入不一致 (_mm_cvtsd_si32)

c++ - 在数据库中插入空行而不是传递值

c++ - ANSI/ISO C++ 和 C++/CLI 有什么区别?

c++ - 如何导出类函数,而不是 DLL 中的整个类

java - 从 Java 应用程序调用 C# 库 : Process is terminated due to StackOverflowException