我有一个MFC MDI应用程序。该应用可以打开2个或更多对话框。我想实现“保存工作区”功能,以便用户在下次打开工作区时打开保存和关闭工作区时打开的对话框。怎么做?
答案 0 :(得分:1)
该功能内置于CMDIFrameWndEx实现中。 SaveMDIState存储当前设置,而LoadMDIState会恢复它。文档还解释了如何保持框架窗口本身的位置和大小,以防万一你想要的东西。
答案 1 :(得分:0)
通常,这是通过将应用程序的当前状态存储到某种持久性存储中来实现的。根据您的体系结构,这可能是存储在Windows用户配置文件目录下的本地配置文件(xml,json等)(您也可以使用Windows注册表),可以使用远程存储(如数据库)或也许这种状态可以存储到云存储中。仅取决于应用程序当前如何处理配置以及您希望如何实现状态存储。
您需要实现UI状态的某种排序或运行历史记录。在加载,关闭和移动时存储当前打开的窗口及其位置。将历史跟踪器注入到创建的每个MDI子项中。这可能是MDI父级中的单例类型。它应该具有通过其句柄查找窗口的功能,并且应该将相关信息存储在对序列化有意义的结构中。在上述每个事件中,通过适当的更改向跟踪器添加呼叫。跟踪器应该坚持您认为合适的规则。
然后,加载过程要求MDI父级在跟踪器初始化之后询问跟踪器是否存在已存储的状态。使用存储的信息(窗口类型和位置(和数据?)),MDI父级然后在适当的位置打开适当的子项。