通過ini實現多語言菜單
發表于:2007-07-14來源:作者:點擊數:
標簽:
下載本文的演示及源代碼(26K) http://263.csdn.net/FileBBS/files/2001_9/T_572_1.zip 從前看過vc知識庫上一篇《實現多語言菜單》的文章。那篇文章里采用的方法是在資源里定義兩個菜單,一個英文,一個中文... 要是程序要作成100國語言的用那種方法就十分不
下載本文的演示及源代碼(26K)
http://263.csdn.net/FileBBS/files/2001_9/T_572_1.zip
從前看過vc
知識庫上一篇《實現多語言菜單》的文章。那篇文章里采用的方法是在資源里定義兩個菜單,一個英文,一個中文...
要是程序要作成100國語言的用那種方法就十分不妥了。原因是軟件作者不可能會100國語言....最主要的是那樣十分不方便!
最好的辦法就是把菜單存到ini文件里,由用戶自行定義菜單(要改成什么就改成什么)。
下面111222嘗試用ini儲存菜單做了一個演示工程。實現了通過ini修改菜單項,通過這個你可以輕松的修改菜單的語言,內容,更主要的是你可以把這些工作交給熱心的用戶....當然,這只是簡單的實現,還存在兩個問題,希望你能夠幫我完善它。
首先,要修改菜單項,你要熟悉CMenu的幾個函數。
GetMenuItemCount();
//獲取菜單項數目
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個參數,改變菜單的文字。
接下來我寫了一個函數,利用遞歸遍歷所有的菜單項按照ini文件的設置修改菜單項:
//函數聲明 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();//獲取該層菜單數
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);//獲取菜單文字
CString cs = AfxGetApp()->GetProfileString("menu",strText,strText);//讀取菜單項在ini里的文字
menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);
// 下面這行可有可無,用這個免得我們手工編輯ini,發布的版本里注釋掉
AfxGetApp()->WriteProfileString("menu",strText,cs);
CMenu* pSub = menu->GetSubMenu(i);
InitMenu(pSub);//遞歸,遍歷popup菜單
}
else
{
CString strText;
menu->GetMenuString (i, strText, MF_BYPOSITION);
CString cs = AfxGetApp()->GetProfileString("menu",strText,strText);
menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);
// 下面這行可有可無,用這個免得我們手工編輯ini,發布的版本里注釋掉
AfxGetApp()->WriteProfileString("menu",strText,cs);
}
}
}
函數的調用:
在CMainFrame::OnCreate的中填加上
//multi language menu
CMenu* pMenu = GetMenu();
InitMenu(pMenu);
至此通過ini實現多語言菜單結束了。
具體可以看演示程序。
menu.ini中儲存著每個菜單項的文字,你只需要修改值就可以改換菜單語言。
上面程序的不足:
沒能修改Prompt的文字(就是在狀態欄上顯示的提示)
沒能顯示快捷鍵(菜單的為new Ctrl N的話將不正常)
這兩個不足我還沒有著手解決,希望能解決的也給我些提示 111222@0451.com
原文轉自:http://www.anti-gravitydesign.com