某些时候,在运行已经写好的菜单栏后,再次对菜单栏进行修改,并运行时发现,菜单栏没有改变。还保存着上一次的结果
解决办法:
在工程的APP类中,在ExitInstance()函数里,
C/C++ code
int CXCApp::ExitInstance()
{
//...........
this->CleanState();
return CWinAppEx::ExitInstance();
}
添加 this->CleanState();
就可以了
这时,再次运行后,点击关闭,再次运行即可。
这是因为:VS2008和VS2010整合了BCG的界面后出现的BUG,原来的界面数据被保存到注册表里,修改后无效。
CWinAppEx::CleanState的作用(MSDN):Removes all the information about the application from the Windows registry.从窗口注册表中移除所有关于应用程序的信息。
有时在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中重新设置窗口尺寸大小时:例如cs.cx=1000; cs.cy=600;但发现窗口尺寸并没有发生变化。这是就需要在void C***App::PreLoadState()函数起始位置添加代码:CleanState(_T("WorkSpace"));重新运行程序,发现窗口尺寸改变。再者:在资源修改了菜单名之后编译运行,结果却发现与没有修改之前的没有任何区别。菜单项的名字还是没有改过来。这是也要添加上述代码。
原因:程序在运行之后将运行信息写进注册表,而程序在退出的时候没有清理掉这些信息,从而导致了在以后程序运行时依然调用前面注册表里边留下的信息去完成界面的初始化以及更新等工作。而我们应该需要的是让程序在运行的时候调用我们最新的配置或者修改信息,而不是以前的信息。