程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC中多語菜單的實現

VC中多語菜單的實現

編輯:vc教程

---- 隨著Internet的發展,軟件的國際化不可避免。一種軟件可能被很多國家的人使用,如給您的軟件加上多種語言的菜單,不但給使用者帶來很多方便,也為您的軟件的推廣帶來很多便利。比如給您開發的中文軟件,加上一個英語或日語菜單,對母語為英語和日語的朋友將會帶來很多便利。VC中實現多語菜單非常容易,下面以英漢對照菜單為例說明多語菜單實現的方法。

---- 一、建立工程項目文件

---- 采用VC中應用程序向導(AppWizard)建立一個工程項目:Menu。在可選者項中,選者單文檔,語言為漢語,其余選者默認項。此時編譯運行得到一個具有中文菜單的應用程序。下面將加入英文菜單到應用程序中。

---- 二、修改建立菜單資源

---- 在資源編輯器中打開菜單資源編輯器編輯IDR_MAINFRAME菜單資源,加入改變菜單的開關命令項。在查看項下加入菜單:

---- ID: ID_MENU_CHANGE Caption 英語(&E)

---- 關閉資源編輯器。用Windows的寫字板打開項目下的資源文件Menu.rc找到如下內容:

IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM "新建(&N) Ctrl+N", ID_FILE_NEW
MENUITEM "打開(&O)... Ctrl+O", ID_FILE_OPEN
MENUITEM "保存(&S) Ctrl+S", ID_FILE_SAVE
MENUITEM "另存為(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "打印(&P)... Ctrl+P", ID_FILE_PRINT
MENUITEM "打印預覽(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "打印設置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "最近文件", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "退出(&X)", ID_APP_EXIT
END
POPUP "編輯(&E)"
BEGIN
MENUITEM "撤消(&U) Ctrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "剪切(&T) Ctrl+X", ID_EDIT_CUT
MENUITEM "復制(&C) Ctrl+C", ID_EDIT_COPY
MENUITEM "粘貼(&P) Ctrl+V", ID_EDIT_PASTE
END

POPUP "查看(&V)"
BEGIN
MENUITEM "工具欄(&T)", ID_VIEW_TOOLBAR
MENUITEM "狀態欄(&S)", ID_VIEW_STATUS_BAR
MENUITEM "英語", ID_MENU_CHANGE
END
POPUP "幫助(&H)"
BEGIN
MENUITEM "關於 Menu(&A)...", ID_APP_ABOUT
END
END
---- 將上述內容復制到剪貼板中,然後拷貝一份到上述內容的下面,並作部分修改。將IDR_MAINFRAME改為 IDR_MAINFRAME_EN,其他漢語譯成英語,並按英語菜單的習慣修改。改後的菜單資源如下:
IDR_MAINFRAME_EN MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "New(&N) Ctrl+N", ID_FILE_NEW
MENUITEM "Open(&O)... Ctrl+O", ID_FILE_OPEN
MENUITEM "Save(&S) Ctrl+S", ID_FILE_SAVE
MENUITEM "Save As(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
  MENUITEM "&Print... Ctrl+P", ID_FILE_PRINT
MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW
MENUITEM "&Printer Reset...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Re¢ File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E(&X)it", ID_APP_EXIT
END
POPUP "(&E)dit"
BEGIN
MENUITEM "&Undo Ctrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cu&T Ctrl+X", ID_EDIT_CUT
MENUITEM "&Copy Ctrl+C", ID_EDIT_COPY
MENUITEM "&Paste Ctrl+V", ID_EDIT_PASTE
END
POPUP "&VIEw"
BEGIN
MENUITEM "&Tool bar", ID_VIEW_TOOLBAR
MENUITEM "&Status bar", ID_VIEW_STATUS_BAR
MENUITEM "&Chinese", ID_MENU_CHANGE
END
POPUP "&Help"
BEGIN
MENUITEM "&About Menu...", ID_APP_ABOUT
END
END
---- 保存修改後的資源文件。把資源文件重新調入資源編輯器,可發現已有兩套菜單資源。如有什麼不合適的地方可在資源編輯器中做進一步修改。

---- 三、加入菜單變量到程序中

---- 由於菜單附屬於主窗口,所以應在CMainFrame類中加入相關變量:

public:
CMenu m_pEnglish;\用於保存英語菜單資源
CMenu m_pChinese;\用於保存漢語菜單資源
enum{C,E}m_eMenu;\標示現在使用的是英語

菜單還是漢語菜單,C--漢語,E--英語

---- 四、初始化變量 需要初始化的變量僅有一個m_eMenu。由於開始時菜單使用默認中文菜單,所以在CMainFrame構造函數中初始化:
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_Menu=C;
}

---- 五、調入保存菜單資源

---- 在主窗口的OnCreate函數中,初始化並保存菜單資源:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.......
m_pEnglish.LoadMenu(IDR_MAINFRAME_EN);\調入英文菜單資源
HMENU hm=::GetMenu(this- >m_hWnd) ;\獲得中文菜單資源
m_pChinese.Attach(hm); \保存中文菜單資源
return 0;
}

---- 六、響應改變菜單命令

---- 利用ClassWizard為CMainFrame類加入ID_MENU_CHANGE菜單命令響應函數:

void CMainFrame::OnMenuChange()
{
// TODO: Add your command handler code here
if(m_Menu==E) //如果現在菜單為英語
{
SetMenu(&m_pChinese);// 把菜單設置為漢語
m_Menu=C;
}
else if(m_Menu==C) //如果現在菜單為漢語
{
SetMenu(&m_pEnglish);//設置菜單為英語
m_Menu=E;
}
}

---- 七、銷毀菜單

---- 在CMainFrame的析夠函數中銷毀菜單:

CMainFrame::~CMainFrame()
{
m_pChinese.DestroyMenu();
m_pEnglish.DestroyMenu();
}

---- 編譯運行程序您就可以獲得一個具有英漢對照菜單的應用程序。

---- 八、結束語

---- 上述例子雖然只給除了兩種語言的菜單,但很容易編出多語言菜單的應用程序。由於各種語言菜單實際上是不同的菜單資源,所以,在同一應用程序中,可以使用不同的菜單。如共享軟件中注冊的用戶使用一種菜單,未注冊的用戶使用另一種菜單,而不必發行多個版本和多次安裝,從而使注冊變得容易並能得到軟件更多的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved