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

时间:2015-05-11 11:53:34

标签: c++ windows mfc

我理解有些函数可以轻松编写Windows注册表,但我发现在使用向导创建的新MFC项目中,一些信息(如分割栏位置,控件的可见性)会自动存储(或者至少我发现没有CWinApp :: Write *调用项目)。由于我还有没有这种行为的旧项目,我需要弄清楚如何在没有项目向导的帮助下实现这一点。有谁请知道这是如何工作的?

2 个答案:

答案 0 :(得分:2)

MFC控制状态保存魔法发生在“新”MFC Feature Pack中,特别是SaveState方法,例如CMFCToolBar::SaveState

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

大多数信息都保存在CPane :: SaveState()中,因此如果您希望保存某些组件的状态,则需要使用从CPane派生的类。 (更多信息here是类层次结构)。

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

答案 1 :(得分:0)

我在很久以前就用过了。如果我正确地提醒它,您应该在调用基类方法之前将所需的信息保存在重写的CWinApp::ExitInstance()中,然后在CWinApp::InitInstance中加载它们。一定要允许默认值,因为在第一次运行时,没有任何东西可以加载,也不要忘记调用(或复制)基类。