如何禁用MFC写入工作区设置到注册表?

spo*_*son 5 c++ registry mfc

默认情况下,Visual Studio 2010中的基本MFC C++项目将使用用户可配置的键名将所有工作区设置存储在HKCU注册表配置单元中.这包括最后一个窗口大小/位置,功能区设置,状态栏等.

如何完全禁用此功能,以便根本不写入注册表?

我尝试不设置SetRegistryKey(),这给了我一个调试断言从框架第一次读/写到注册表. SetRegistryKey((LPCTSTR)NULL)给出了相同的结果. SetRegistryBase()似乎没有效果.在没有其他方法CWinApp/ CWinAppEx没什么帮助.

Nat*_*ate 5

编辑:我原来的答案是错误的。我已经编辑了答案。


您可以告诉 MFC 将设置存储在.ini文件而不是注册表中。请参阅此先前的答案(更新:这仅在您不使用时才有效CWinAppEx。)

如果你想防止MFC从节约一些菜单和工具栏的状态完全,以下内容添加到您的应用程序的构造函数:

m_bSaveState = FALSE;
Run Code Online (Sandbox Code Playgroud)

m_bSaveState您的应用是否源自成员只被定义CWinAppEx

或者,您可以覆盖CWinAppEx::SaveStateCWinAppEx::LoadState


要消除WindowPlacement注册表项,请覆盖CWinAppEx::StoreWindowPlacement.

您可能仍会写入其他注册表项。一个完整的解决方案将涉及子类化CSettingsStore,然后在您的应用程序中调用CSettingsStoreSP::SetRuntimeClass. (有关更多信息,请参阅this。)这相当困难,因为您必须在自定义CSettingsStore类中覆盖一大堆虚函数。