看看应用程序类,这个类是MFC程序中必不可少的一个类。MFC用CWinAppEx替代了CWinApp。CWinAppEx从CWinApp派生。向导生成的代码中,主要是InitInstance这个函数有了变化。
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) InitContextMenuManager(); InitKeyboardManager(); InitTooltipManager(); CMFCToolTipInfo ttParams; ttParams.m_bVislManagerTheme = TRUE; theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL, RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);MFC新增加鼠标管理器(CMouseManager)、键盘管理器(CKeyboardManager,管理加速键)、上下文菜单管理器(CContextMenuManager)、工具提示管理器(CTooltipManager)、外壳管理器(CShellManager)和用户工具管理器(CUserToolsManager),真是令人眼花撩乱。这些管理器可以通过CWinAppEx的函数访问。应用程序类在这里创建了上下文菜单管理器、键盘管理器和工具提示管理器。
CWinAppEx中有一对新的方法:LoadState()和SaveState()。LoadState在创建主框架时(CFrameImpl::OnLoadFrame)被调用,SaveState在销毁主框架之时(CFrameImpl::OnCloseFrame)调用。PreLoadState、PreSaveState、LoadCustomState和SaveCustomState是留给派生类使用的,它们在CWinAppEx中实现为空;它们在LoadState和SaveState中被分别调用。其实很多类都有LoadState和SaveState这一对方法,它们用这一对函数读取配置和保存配置。CWinAppEx在LoadState中读取各个管理器的状态,在SaveSate中保存各个管理器的状态。
LoadState、SaveSate和ClearState都是虚函数,意味着它们可以被派生类改写。
应用程序的状态通常被保存在注册表中,它的具体位置是:HKEY_CURRENT_USER/"Software"/RegistryKey/ProfileName,你可以用函数GetAppRegistryKey获取这个值。