VC簡單編程實現多語言菜單
發表于:2007-07-14來源:作者:點擊數:
標簽:
隨著計算機技術的快速發展,軟件的交流越來越頻繁,軟件的國際化已成為一個軟件 開發 人員不可回避的一個問題。所謂軟件的國際化,就是讓軟件界面支持多種語言,從而可以被很多國家的人使用。為了使應用程序支持多種語言,一個很好的辦法就是使用動態鏈接庫
隨著計算機技術的快速發展,軟件的交流越來越頻繁,軟件的國際化已成為一個軟件
開發人員不可回避的一個問題。所謂軟件的國際化,就是讓軟件界面支持多種語言,從而可以被很多國家的人使用。為了使應用程序支持多種語言,一個很好的辦法就是使用動態鏈接庫,將不同的語言資源放入不同的庫中,根據需要程序加載不同的動態庫,從而實現程序的國際化。但是這種方法實現起來不很方便,對軟件開發人員要求較高,不適宜初學者。為了解決這個問題,以實現多語言菜單為例,筆者介紹在VC編程中一種簡單實現方法,從而實現軟件的國際化支持。
在VC6.0中生成一個單文檔應用程序,其它采用默認項目,項目生成后,默認的菜單為中文,為了使菜單支持別的語言,用文本形式打開項目中的資源文件(.rc文件),找到項目中的菜單文本內容如下:
IDR_MAINFRAME 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 "Save(&S)tCtrl+S", ID_FILE_SAVE
MENUITEM "Save as(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "Print(&P)...tCtrl+P", ID_FILE_PRINT
MENUITEM "Print Preview(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "Print Setting(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Recent Files", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "Exit(&X)", ID_APP_EXIT
END
.......................................
END
將上述內容復制一份,拷貝到該資源文件的后面,將上面內容的第一行修改為“IDR_MAINFRAME_ENGLISH MENU PRELOAD DISCARDABLE”,這樣作也就是為英文菜單起了一個叫“IDR_MAINFRAME_ENGLISH”的名字。最后將拷貝內容的每一項目中的MENUITEM部分改為英文即可,例如,對于“文件/打開”菜單來說,修改為“MENUITEM "Open(&O)...tCtrl+O", ID_FILE_OPEN”,對資源文件中后續拷貝的每一個菜單項修改后,保存資源。下面要作的是在程序的CMainFrame類中加入變量CMenu m_CurrentMenu對象,用來裝載中文或英文菜單資源;另外,還需要加入枚舉變量enum Enum{e,c}m_Current,并給它一個初始值"c",當m_Current等于 "c"時說明項目選用中文菜單,等于"e"時說明項目選擇了英文菜單。
下面在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中添加代碼實現裝入英文菜單資源
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
..................................//加載工具條和狀態條的代碼;
if(m_Current= = c)
m_CurrentMenu.LoadMenu("IDR_MAINFRAME_ENGLISH");
else
m_CurrentMenu.LoadMenu(IDR_MAINFRAME);
SetMenu(&m_englistmenu);//設置界面菜單;
return 0;
}
開發人員可以通過設置m_Current的不同值,將程序編譯成不同的語言版本,上述代碼在
Windows 98和Visual C++6.0編譯環境下通過
測試,實現了多語言菜單,有興趣的讀者可以自己上機試一試。
(合肥 劉濤)
原文轉自:http://www.kjueaiud.com