軟體國際化勢在必行。為應用程式加入多語言選單,不僅方便使用者,更利於產品推廣。本文以中英雙語選單為例,示範在 VC 中實現動態切換的完整流程。

專案語言選中文,其餘預設。資源編輯器中新增切換選單項 IDD_MENU_CHANGE。
打開 .rc 為文字,找到 IDR_MAINFRAME 選單區塊,完整複製一份並改為英文資源 IDR_MAINFRAME_ENGLISH:
IDR_MAINFRAME_ENGLISH MENU PRELOAD DISCARDABLE
BEGIN
POPUP "File(&F)"
BEGIN
MENUITEM "New(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM "Open(&O)...\tCtrl+O", ID_FILE_OPEN
...
MENUITEM "Chinese", ID_MENU_CHANGE
END
POPUP "Edit(&E)" ...
POPUP "View(&V)" ...
POPUP "Help(&H)" ...
END
儲存資源檔。
CMenu m_englistmenu, m_chinesemenu;
enum { e, c } m_current; // 當前語言
CMainFrame::CMainFrame() : m_current(c) {} // 預設中文
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// ...
m_englistmenu.LoadMenu(_T("IDR_MAINFRAME_ENGLISH")); // 載入英文選單
HMENU hMenu = ::GetMenu(m_hWnd); // 取得預設中文選單
m_chinesemenu.Attach(hMenu); // 保存中文選單
return 0;
}
void CMainFrame::OnMenuChange()
{
if (m_current == e)
{
SetMenu(&m_chinesemenu);
m_current = c;
}
else
{
SetMenu(&m_englistmenu);
m_current = e;
}
}
編譯執行,即可在「檢視」選單中點擊「英文」/「Chinese」動態切換語言,命令 ID 保持不變,功能邏輯零修改。