發(fā)布時間:2011-09-16 共2頁
從前看過vc知識庫上一篇《實現(xiàn)多語言菜單》的文章。那篇文章里采用的方法是在資源里定義兩個菜單,一個英文,一個中文...
要是程序要作成100國語言的用那種方法就十分不妥了。原因是軟件作者不可能會100國語言....最主要的是那樣十分不方便!
最好的辦法就是把菜單存到ini文件里,由用戶自行定義菜單(要改成什么就改成什么)。
下面111222嘗試用ini儲存菜單做了一個演示工程。實現(xiàn)了通過ini修改菜單項,通過這個你可以輕松的修改菜單的語言,內(nèi)容,更主要的是你可以把這些工作交給熱心的用戶....當然,這只是簡單的實現(xiàn),還存在兩個問題,希望你能夠幫我完善它。
首先,要修改菜單項,你要熟悉CMenu的幾個函數(shù)。
GetMenuItemCount();
//獲取菜單項數(shù)目
GetMenuItemID(UNIT i);
//獲取菜單項i的ID,這里ID為0代表分割線,-1為POPUP菜單項。
GetMenuString( UINT nIDItem, CString& rString, UINT nFlags );
//獲取菜單項的字符串
ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
//修改菜單項,這里我們主要是修改第4個參數(shù),改變菜單的文字。
接下來我寫了一個函數(shù),利用遞歸遍歷所有的菜單項按照ini文件的設置修改菜單項:
//函數(shù)聲明 MainFrm.h
void InitMenu(CMenu* menu);
/////////////////////////////////////////////////
//功能:多語言菜單 MainFrm.cpp
//原理:遍歷菜單項,替換菜單項文字為ini文件中的對應值
//// by 111222 9月13日
/////////////////////////////////////////////////
void CMainFrame::InitMenu(CMenu* menu)
{
if(menu==NULL)
return;
int nCount = menu->GetMenuItemCount();//獲取該層菜單數(shù)
for(int i=0;i<nCount;i++)//遍歷所有菜單項
{
int id = menu->GetMenuItemID(i);//查看菜單屬性,id=0為分割線,-1為popup菜單
if(id==0)
{}
else if(id==-1)
{
CString strText;
menu->GetMenuString (i, strText, MF_BYPOSITION);//獲取菜單文字