如何保存MFC应用程序的布局设置?

How to save layout settings of MFC application?

我知道有些函数可以轻松编写 windows 注册表,但是我发现在使用向导创建的新 MFC 项目中,一些信息(如拆分条位置、控件的可见性)会自动存储 (或者至少我发现项目中没有 CWinApp::Write* 调用)。因为我也有没有这种行为的旧项目,所以我需要弄清楚如何在没有项目向导帮助的情况下做到这一点。请问有人知道这是如何工作的吗?

我很久以前就用过那个。如果我正确地提醒它,你应该在调用基础class方法之前将你想要的信息保存在覆盖的CWinApp::ExitInstance()中,然后在CWinApp::InitInstance中加载它们。一定要允许默认值,因为一开始 运行 不会加载任何东西,不要忘记调用(或复制)base class.

MFC 控件状态保存魔术发生在 'New' MFC Feature Pack, specifically in the SaveState methods, for example CMFCToolBar::SaveState

因此,要利用这一点,您需要升级您的工具栏和菜单以使用更新的控件,并升级您的应用程序以继承自 CWinAppEx。我建议您使用基于新 MFC 向导的应用程序作为如何升级旧 MFC 应用程序的指南。

大部分信息保存在CPane::SaveState()中,因此如果你想保存某些组件的状态,你需要使用从CPane派生的classes。 (有关更多信息,here 是 class 层次结构)。

保存 window 状态的过程是通过 CFrameImpl::OnClosingMainFrame() 启动的。此函数依次调用 CWinAppEx::SaveState() 来保存一些应用程序设置,然后调用 CMFCToolBar 的所有实例(它们在调用 OnCreate 时将自己添加到 CMFCToolBars 的全局列表中)。以类似的方式保存所有可停靠窗格,但列表属于您的主框架。然后保存主框架的位置和大小。 CViews 和 CFrameWnds 不太受欢迎,因为我发现并尝试过,唯一保存的信息是可见性。