在做多语言界面切换时,UI界面可以插入副本来修改语言,但是MenuBar却不会根据线程UI语言进行加载,因为在程序退出时MFC程序会向注册表写入一些控件的属性记录,所以在程序启动的时候会先加载注册表根据上一次保存的数据进行加载,通过多次测试我总结了两种修改方式:
1. 使用 CleanState() 在程序退出时清空注册表信息; 缺点是会把程序记录的所有数据都清除
int CUCMensApp::ExitInstance()
{
this->CleanState();
return CBCGPWinApp::ExitInstance();
}
2. 重载CBCGPMenuBar类CBCGPMenuBarEx, 重写是为了不保存和加载数据,否则修改语言时需要删除注册表记录数据才可以更新状态
class CBCGPMenuBarEx : public CBCGPMenuBar
{
public:
CBCGPMenuBarEx(){}
virtual ~CBCGPMenuBarEx(){}
protected:
BOOL LoadState (LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{
return TRUE;
}
BOOL SaveState (LPCTSTR lpszProfileName, int nIndex