菜单问题:为什么不支持多语言DLL
Kaile 2005-10-26 06:55:00 我是用了GUILIB这个开放源码的界面库,现在其他正常,只是如果把资源换成繁体做到资源DLL中,菜单中的文字并不能变成繁体,仍然是EXE文件中的简体。但是对话框中的文字一切正常。
请教高手如何修改?
GUILIB把菜单当作toolbar来处理,菜单很漂亮
if (!m_wndMenuBar.CreateEx(this, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_SIZE_DYNAMIC ) ||
!m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME)) // 加载菜单资源
{
TRACE0("Failed to create menubar\n");
return -1; // fail to create
}
/* 用这几句来代替上面的几句,可以实现语言转换,但菜单不美观
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
DrawMenuBar();
menu.Detach();
*/
m_NewMenu.LoadMenu(IDR_MAINFRAME); //加载阴影风格图标等
m_wndCool.Install(this);
m_wndCool.LoadToolbar(IDR_MAINFRAME);
m_wndMenuBar.EnableDocking(CBRS_ALIGN_TOP);
DockControlBar(&m_wndMenuBar,m_dockTop);
是否可以通过修改它的LoadMenuBar或其他方法来实现我要的功能?
以下是这个库的相关代码:
//******************************************************************
BOOL CMenuBar::LoadMenuBar(UINT nIDResource)
{
ASSERT(m_hMenu == NULL);
ASSERT_VALID(m_pDockSite);
if (m_pDockSite->GetMenu()) {
PostMessage(MB_SET_MENU_NULL, (WPARAM)m_pDockSite->GetSafeHwnd());
}
m_hMenu = ::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(nIDResource));
if (m_hMenu == NULL) {
TRACE(_T("Failed to load menu\n"));
return FALSE;
}
return InitItems();
}
HMENU CMenuBar::LoadMenu(HMENU hMenu, HMENU hWindowMenu)
{
ASSERT(::IsMenu(hMenu));
ASSERT_VALID(this);
CFrameWnd* pFrame = GetParentFrame();
if (::GetMenu(pFrame->GetSafeHwnd()) != NULL) {
// not to make MFC ignore SetMenu(NULL), post it.
PostMessage(MB_SET_MENU_NULL, (WPARAM)pFrame->GetSafeHwnd());
}
HMENU hOldMenu = m_hMenu;
m_hMenu = hMenu;// menu is shared with MFC
// initialize Items
VERIFY(InitItems());
if (hMenu) {
m_hWindowMenu = hWindowMenu;
RefreshBar();// and menubar itself
}
return hOldMenu;
}
//******************************************************************
BOOL CMenuBar::InitItems()
{
ASSERT(m_hMenu);
// clean up all items
DeleteItems();
// buttons
for (int i = 0; i < ::GetMenuItemCount(m_hMenu); ++i) {
m_arrItem.Add(new CMenuButton(m_hMenu, i,this));
}
if (m_bMDIApp) {
// icon
CWnd* pFrame = GetTopLevelFrame();
ASSERT_VALID(pFrame);
CMDIFrameWnd* pMDIFrame = STATIC_DOWNCAST(CMDIFrameWnd, pFrame);
HWND hWndMDIClient = pMDIFrame->m_hWndMDIClient;
ASSERT(::IsWindow(hWndMDIClient));
HWND hWndChild = (HWND)::SendMessage(hWndMDIClient,
WM_MDIGETACTIVE, 0, 0);
if ((!bIsTabbed) )
{
m_pMenuIcon = new CMenuIcon(this);
m_arrItem.InsertAt(0, m_pMenuIcon);
// frame control
m_pMenuControl = new CMenuControl(this);
m_arrItem.Add(m_pMenuControl);
// reinitializing
m_pMenuIcon->OnActivateChildWnd();
m_pMenuControl->OnActivateChildWnd();
}
}
return TRUE;
}
下载网址是:
http://www.beyondata.com/