隨著計算機技術的快速發展,軟件的交流越來越頻繁,軟件的國際化已成為一個軟件開發人員不可回避的一個問題。所謂軟件的國際化,就是讓軟件界面支持多種語言,從而可以被很多國家的人使用。為了使應用程序支持多種語言,一個很好的辦法就是使用動態鏈接庫,將不同的語言資源放入不同的庫中,根據需要程序加載不同的動態庫,從而實現程序的國際化。但是這種方法實現起來不很方便,對軟件開發人員要求較高,尤其是對於初學者,難度較大。為了解決這個問題,以實現多語言菜單為例,筆者介紹在VC編程中一種簡單實現方法,從而實現軟件的國際化支持。下圖一給出了中英文菜單的應用程序界面:
(a)中文菜單
(b)英文菜單
一、實現方法
假如Visual C++6.0中生成的應用程序默認的菜單為中文,我們為了使應用程序的菜單支持英文,首先需要給應用程序添加英文菜單,讀者朋友首先想到的可能是利用Visual C++提供的資源編輯器,這種方法當然可行,但是還有一種更方便更快捷的方法。首先用Windows的小程序"記事本"以文本的形式打開項目中的資源文件(.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
END
POPUP "幫助(&H)"
BEGIN
MENUITEM "關於 MutiLanguageMenu(&A)...", ID_APP_ABOUT
END
END
將上述內容復制一份,拷貝到該資源文件的後面,並將上面內容的第一行修改為"IDR_English_MAINFRAME MENU PRELOAD DISCARDABLE",這樣作也就是為英文菜單起了一個叫"IDR_MAINFRAME_ENGLISH"的名字。最後將各個菜單項目的中文說明修改為英文說明,內容如下:
"IDR_Englishi_MAINFRAME MENU PRELOAD DISCARDABLE"
BEGIN
POPUP "File(&F)"
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(&P)... Ctrl+P", ID_FILE_PRINT
MENUITEM "PrintView(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "Print Setup(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Recent Files", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM "Exit(&X)", ID_APP_EXIT
END
POPUP "Edit(&E)"
BEGIN
MENUITEM "Undo(&U) Ctrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cut(&T) Ctrl+X", ID_EDIT_CUT
MENUITEM "Copy(&C) Ctrl+C", ID_EDIT_COPY
MENUITEM "Paste(&P) Ctrl+V", ID_EDIT_PASTE
END
POPUP "VIEw(&V)"
BEGIN
MENUITEM "ToolBar(&T)", ID_VIEW_TOOLBAR
MENUITEM "StatusBar(&S)", ID_VIEW_STATUS_BAR
END
POPUP "Help(&H)"
BEGIN
MENUITEM "About MutiLanguageMenu(&A)...", ID_APP_ABOUT
END
END
修改過程序的資源文件並存盤退出後,接著要作的是在程序的CMainFrame類中加入變量CMenu m_CurrentMenu對象,用來根據需要裝載中文或英文菜單資源。CMenu類是MFC提供的管理菜單的類,該類的LoadMenu()函數來裝載菜單資源,函數的原型如下:
BOOL LoadMenu( UINT nIDResource );
函數中的參數nIDResource是菜單資源的ID號
[1] [2] 下一頁