2015-05-11 33 views
1

我明白有一些函数可以很容易地编写Windows注册表,但是我发现,在使用向导创建的新MFC项目中,一些信息(如分隔栏位置,控件的可见性)会自动存储(或者至少我没有发现CWinApp ::在项目中写入*调用)。由于我也有旧的项目没有这种行为,我需要弄清楚如何做到这一点没有项目向导的帮助。请有人知道这是如何工作的?如何保存MFC应用程序的布局设置?

回答

2

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

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

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

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

+0

嗯,你是对的。王国的马...这将能够阅读我的MFC源代码。 – Pyjong

+0

如果您想要一个程序来读取/理解MFC源代码,请尝试类似Agent Ransack的代码。 – snowdude

+0

Nah我只是懒惰,我最终读了它,但谢谢你:)我可以编辑你的答案,添加一些信息,我发现并标记它接受? – Pyjong

0

我在那个时候以前用过。如果我正确地提醒它,则应在调用基类方法之前将所需的信息保存在覆盖的CWinApp::ExitInstance()中,然后将其加载到CWinApp::InitInstance中。一定要允许默认值,因为在第一次运行时,不会加载任何内容,并且不要忘记调用(或复制)基类。