保存工作区 MFC C++ MDI

Posted

技术标签:

【中文标题】保存工作区 MFC C++ MDI【英文标题】:Save Workspace MFC C++ MDI 【发布时间】:2016-08-06 12:32:25 【问题描述】:

我有一个 MFC MDI 应用程序。该应用程序可以打开 2 个或更多对话框。我想实现“保存工作区”功能,以便用户在下次打开工作区时打开他保存和关闭工作区时打开的对话框。如何做到这一点?

【问题讨论】:

【参考方案1】:

该功能内置于CMDIFrameWndEx 实现中。 SaveMDIState 存储当前设置,而LoadMDIState 恢复它。该文档还解释了如何保持框架窗口本身的位置和大小,以防万一这也是您想要的。

【讨论】:

【参考方案2】:

通常这是通过将应用程序的当前状态存储到某种持久存储中来实现的。根据您的架构,这可能是存储在 Windows 用户配置文件目录下的本地配置文件(xml、json 等)(您也可以使用 Windows 注册表),可以使用远程存储(例如数据库),或者这种状态可以存储到云存储中。仅取决于应用程序当前如何处理配置以及您希望使状态存储的通用性如何。

您将希望实现某种 UI 状态的排序或运行历史记录。存储当前打开的窗口及其在加载、关闭和移动时的位置。将历史跟踪器注入到创建的每个 MDI 子项中。这可能是 MDI 父级中的单例类型。它应该能够通过句柄来查找窗口,并且应该将相关信息存储在对序列化有意义的结构中。在上述每个事件中,添加对跟踪器的调用并进行适当的更改。跟踪器应遵循您认为合适的任何规则。

然后,加载过程要求 MDI 父级在使用曾经存在的存储状态进行初始化后询问跟踪器。使用存储的信息(窗口类型和位置(和数据?)),MDI 父级然后在适当的位置打开适当的子级。

【讨论】:

您不必跟踪位置/大小更改或项目的创建/销毁来转储当前状态的快照。 MFC 没有,并且仍然实现保存/恢复。 取决于您的要求。可能这就是所有需要的。如果您需要从意外停机中恢复怎么办?如果您希望能够在不同网络上的不同机器之间存储状态怎么办?

以上是关于保存工作区 MFC C++ MDI的主要内容,如果未能解决你的问题,请参考以下文章

使用具有多个***窗口的 MFC MDI

在 MFC MDI 程序中拆分子窗口

在 MFC C++ 中打开对话框

MFC,文件新建对话框提示参数和多个文档类型?

c++ MFC访问多个文件

如何从 MDI Visual C++ 2008 应用程序更改子窗口的背景