我做个几个语言包的dll,我的程序模式在2010下编写的。
用下面的代码替换语言包
if (NULL != m_hRes)
{
::AfxFreeLibrary(m_hRes);
} m_hRes = ::AfxLoadLibrary(_T("TK_CHN.dll"));
if(m_hRes)
{
::AfxSetResourceHandle(m_hRes);
LoadMenu();
}
void CMainFrame::LoadMenu()
{
if(NULL != m_pmenu)
{
delete m_pmenu;
}
m_pmenu = new CMenu();
m_pmenu->LoadMenu(IDR_MAINFRAME);
m_wndMenuBar.CreateFromMenu(m_pmenu->GetSafeHmenu(), TRUE, TRUE);
}可以替换成功,但当我打开一个子窗体时,菜单栏会变回以前的语言,因为我的子窗体在创建时已经和开始的菜单关联上了
m_pTempPic = new CMultiDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CTKToolBoxDoc),
RUNTIME_CLASS(CPictureFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CPictureView));
if (!m_pTempPic)
return FALSE;
AddDocTemplate(m_pTempPic);这个该怎么解决呢?或者2010下怎么实现替换语言包呢?谢谢!
用下面的代码替换语言包
if (NULL != m_hRes)
{
::AfxFreeLibrary(m_hRes);
} m_hRes = ::AfxLoadLibrary(_T("TK_CHN.dll"));
if(m_hRes)
{
::AfxSetResourceHandle(m_hRes);
LoadMenu();
}
void CMainFrame::LoadMenu()
{
if(NULL != m_pmenu)
{
delete m_pmenu;
}
m_pmenu = new CMenu();
m_pmenu->LoadMenu(IDR_MAINFRAME);
m_wndMenuBar.CreateFromMenu(m_pmenu->GetSafeHmenu(), TRUE, TRUE);
}可以替换成功,但当我打开一个子窗体时,菜单栏会变回以前的语言,因为我的子窗体在创建时已经和开始的菜单关联上了
m_pTempPic = new CMultiDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CTKToolBoxDoc),
RUNTIME_CLASS(CPictureFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CPictureView));
if (!m_pTempPic)
return FALSE;
AddDocTemplate(m_pTempPic);这个该怎么解决呢?或者2010下怎么实现替换语言包呢?谢谢!
期待高手!我总结点我的想法:
1. VS2010与VC6.0的菜单继承类不是同一个
2. VS2010菜单项被保存在注册表里面
3. 修改菜单代码只能修改当前的界面,当弹出子窗体时,由于已经关联了菜单,菜单还原了
修改代码:
CMenu *pMenu = CMenu::FromHandle(m_wndMenuBar.GetHMenu());
CString strConnectTitle = _T("连接:");
pMenu->ModifyMenu(ID_CON_CONNECT, MF_BYCOMMAND, ID_CON_CONNECT, strConnectTitle);
m_wndMenuBar.CreateFromMenu(pMenu->GetSafeHmenu(), TRUE, TRUE);
4. 以上三个方面导致替换语言包出现错误。我感觉实质还是如何修改一个菜单的文字,使其在程序始终都保持一直,像VC6.0那样。我试过在
int CTKToolBoxApp::ExitInstance()
{
//TODO: 处理可能已添加的附加资源
AfxOleTerm(FALSE);
this->CleanState();
return CWinAppEx::ExitInstance();
}添加红色的使其在关闭时不保存到注册表里面,但还是有上面现象。
希望大家看到能发表一下,共同学习2010新特性。谢谢!
我是在程序中动态转换 用的是2010,程序代码已经Load了,没有实现我的效果
我和你问题有点类似,不知如何解决,vs2010在菜单 这一块好像知道的人不多,问不出结果。不知你如何解决的给你说一下啊。
http://hi.baidu.com/xiaole10368/item/01e26494c1f9f4db1a49df41
{
//TODO: 处理可能已添加的附加资源
AfxOleTerm(FALSE);
this->CleanState();
return CWinAppEx::ExitInstance();
}这种方法就可以,删掉以前的注册表。