第11章 GUI Page480~486 步骤二十七 “脏数据”与“新文档”状态维护
发布时间:2024年01月09日
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!