第11章 GUI Page480~486 步骤二十七 “脏数据”与“新文档”状态维护

2024-01-09 06:58:24

wxMyPainterFrame类定义中声明新的成员:

增加一个全局变量,初始化新成员:

先实现TrySaveFile()

SaveFile()暂时为空实现

增加两个新的私有成员方法:

wxMyPainterFrame类中,修改了“_items”的几个地方

①? 鼠标抬起时,添加新元素;

②? 删除事件;

③? 置顶,上浮一层,下沉一层,置底四个事件中,修改了元素位置;

④? 隐藏事件中,修改了元素的可视属性。

在这几个地方,调用SetDirty(true)

添加新图元时:

删除图元时

隐藏图元时:

调整次序时:

OnMenuItemTopLevelSelected(wxCommandEvent& event)? ? OnMenuItemFowardLevelSelected(wxCommandEvent& event)? ? OnMenuItemBackLevelSelected(wxCommandEvent& event)? OnMenuItemBottomLevelSelected(wxCommandEvent& event)

这四个函数的最后,加上对SetDirty(true)的调用

修改基类EditAction,增加一个_is_dirty的属性

修改嵌套类EmptyAction,增加一个构造函数

基类EditAction的IsDirty和SetDirty方法一个用于查询,一个用于修改,但外部调用实际是通过ActionLink对象作为入口,所以需要为后者也添加类似的接口:

回到主窗口的代码,当有人调用Undo或Redo时,我们就从Action链表中查询一下,新到达的节点位置,记录的状态是什么

对应的,SaveFile()操作,需要添加上ActionLink的Save操作,以便及时记录“此刻数据不脏”的状态:

运行效果:

文章来源:https://blog.csdn.net/yanzhenxi/article/details/135454453
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。