透過ini實現多語言選單 (轉)
透過ini實現多語言選單
/FileBBS/files/2001_9/T_572_1.zip">本文的演示及(26K)
從前看過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
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);
strText.Replace(_T('t'),_T('_'));//解決't'無法使用GetProfileString的問題
CString cs = AfxGetApp()->GetProfileString("menu",strText,strText);
cs.Replace(_T('_'),_T('t'));//把上面的replace再變回來
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的文字(就是在狀態列上顯示的提示)
這個不足我還沒有著手解決,希望能解決的也給我些提示 to:111222@0451.com">111222@0451.com。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VC開發多語言介面支援----INI實現(轉)
- ASP實現多語言支援 (轉)
- 多語言版vfp程式設計簡單實現 (轉)程式設計
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- 使用純資源DLL檔案實現多語言選單、介面文字、Tooltips等 (轉)
- Django通過session實現多語言切換DjangoSession
- Rama透過拓撲通用語言實現ACID事務
- OAF多語言的實現
- 學在 VC ,用在 VB - 透過語言看 "世界" (轉)
- .NET CORE 多語言實現方案
- so easy 前端實現多語言前端
- 透過列舉enum實現單例單例
- c語言單向連結串列逆轉實現方法C語言
- C語言實現繼承多型C語言繼承多型
- Android實現多語言so easyAndroid
- Go語言實現excel匯入無限級選單結構GoExcel
- 如何透過 Rancher 輕鬆實現多雲部署
- 輕量級多級選單控制框架程式(C語言)框架C語言
- Java實現多級選單(遞迴)Java遞迴
- 透過tab鍵實現命令補齊 (轉)
- 如何實現 OpenAPI 多語言 SDK 開發?API
- django自定義構建模板,透過bootstrap實現選單隱藏和顯示Djangoboot
- 自繪選單的實現 (轉)
- 透過python讀取ini配置檔案Python
- 使用Go語言實現簡單MapReduce框架Go框架
- golang透過mysql語句實現分頁查詢GolangMySql
- Android列表實現單選、多選、全選、取消、刪除Android
- Flutter多語言實踐Flutter
- C語言實現多級濾波—乾貨C語言
- 前端另一種多語言的實現思路前端
- Android 實現APP可切換多語言AndroidAPP
- Asp.net 多語言介面的實現方法...ASP.NET
- 選擇下拉選單項實現跳轉效果
- 自定義通過PopupWindow實現通用選單
- Go語言實現布穀鳥過濾器Go過濾器
- 手寫程式語言-實現運算子過載
- 多使用者,多語言設定(轉)
- Golang | Go語言多型的實現與interface使用Golang多型