wince实现应用程序界面中英文切换(EVC4.0)
我参照耿海增先生的vc现实方法,改造为EVC使用,创建语言文件CHINESE.LNG ,ENGLISH.LNG,不同是每个窗体都加入一个识别字段。
中文文件CHINESE.LNG
[Language]
language=Chinese
FrmMainCount=189
FrmNewCount=3
FrmAddCount=6
FrmCopyCount=6
FrmDeleteCount=7
FrmAboutCount=2
lng=1
[FrmMain]
IDD102_Title=KnitCtrol2009-haisen
IDD102_1000=读取文件
IDD102_1001=存储文件
IDD102_1002=新增页数
IDD102_1003=增加页数
IDD102_1006=拷贝页数
IDD102_1007=删除页数
IDD102_1008=帮助
[FrmNew]
IDD164_Title=新增页
IDD164_1405=张数号码:
IDD164_1407=执行
IDD164_1408=取消
[FrmAdd]
IDD165_Title=添加页
IDD165_1416=张数号码:
IDD165_1417=张数号码:
IDD165_1412=开头
IDD165_1413=最后
IDD165_1414=执行
IDD165_1415=取消
[FrmCopy]
IDD167_Title=拷贝页
IDD167_1426=起始张数号码:
IDD167_1427=结束张数号码:
IDD167_1428=复制最初的张数编号:
IDD167_1429=复制最终的张数编号:
IDD167_1424=执行
IDD167_1425=取消
[FrmDelete]
IDD166_Title=删除页
IDD166_1437=起始张数号码:
IDD166_1438=结束张数号码:
IDD166_1432=全部张数
IDD166_1433=开头
IDD166_1434=最后
IDD166_1435=执行
IDD166_1436=取消
[FrmAbout]
IDD170_Title=关于
IDD170_1322=取消
IDD170_1461=更多>>
英文文件ENGLISH.LNG
[Language]
language=English
FrmMainCount=189
FrmNewCount=3
FrmAddCount=6
FrmCopyCount=6
FrmDeleteCount=7
FrmAboutCount=2
lng=2
[FrmMain]
IDD102_Title=KnitCtrol2009-haisen
IDD102_1000=OpenFile
IDD102_1001=SaveFile
IDD102_1002=NewPage
IDD102_1003=AddPage
IDD102_1006=CopyPage
IDD102_1007=DeletePage
IDD102_1008=Help
[FrmNew]
IDD164_Title=New
IDD164_1405=Pages:
IDD164_1407=Run
IDD164_1408=Cancel
[FrmAdd]
IDD165_Title=Add
IDD165_1416=Pages:
IDD165_1417=Pages:
IDD165_1412=Begin
IDD165_1413=End
IDD165_1414=Run
IDD165_1415=Cancel
[FrmCopy]
IDD167_Title=Copy
IDD167_1426=BeginPages:
IDD167_1427=EndPages:
IDD167_1428=CopyBeginPages:
IDD167_1429=CopyEndPages:
IDD167_1424=Run
IDD167_1425=Cancel
[FrmDelete]
IDD166_Title=Delete
IDD166_1437=BegingPages:
IDD166_1438=EndPages:
IDD166_1432=AllPages
IDD166_1433=Begin
IDD166_1434=End
IDD166_1435=Run
IDD166_1436=Cancel
[FrmAbout]
IDD170_Title=About
IDD170_1322=Cancel
IDD170_1461=More>>
现实过程有以下几步:
1.CIniWR 为网上流行读写INI文件类,直接COPY,呵呵
2.最好使用GetModuleFileName函数获得当前路径 ,以便准确读取语言文件。
实现代码:
CString szCurPath("");
GetModuleFileName(NULL,szCurPath.GetBuffer(MAX_PATH),MAX_PATH);
szCurPath.ReleaseBuffer();
g_szCurPath = szCurPath.Left(szCurPath.ReverseFind('//') + 1);
3.SetDialogLanuage函数为设置对话框语言,传递参数有:字段名,窗体的指针,窗体的ID号,语言文件路径(中文或英文)。
/*********************************************************************
* 函数名称:SetDialogLanuage(LPCTSTR lpAppName,CDialog *pDlg,UINT uDlgID,LPCTSTR pFileName)
* 说明: * 入口参数:
// lpAppName[in] - 字段名
// lpFileName[in] - 完整的INI文件名
* CDialog *pDlg -- 对话框的指针
* UINT uDlgID -- 该对话框的ID
* 作者:
*********************************************************************/
void SetDialogLanuage(LPCTSTR lpAppName,CDialog *pDlg,UINT uDlgID,LPCTSTR pFileName)
{
CIniWR Ca;
CString szKey,szText;
DWORD dwSize = 1000;
LPTSTR pReturnedString = (LPTSTR)malloc(dwSize);
TCHAR* pDefault=_T("ERROR");
//读对话框标题
szKey.Format(_T("IDD%d_Title"),uDlgID);
if (Ca.GetPrivateProfileString(lpAppName, szKey, pDefault,
pReturnedString,dwSize, pFileName)!=0)
{
pDlg->SetWindowText(pReturnedString);
}
//写入各个子控件的标题文字
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
while(pWnd != NULL)
{
szKey.Format(_T("IDD%d_%d"),uDlgID,pWnd->GetDlgCtrlID());
if (Ca.GetPrivateProfileString(lpAppName, szKey, pDefault,
pReturnedString,dwSize, pFileName)!=0)
{
pWnd->SetWindowText(pReturnedString);
}
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
}
完成上面几步,这样就实现了语言切换了!语言表述有不明白的地方,请见谅!
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/churenxh/archive/2009/08/17/4455817.aspx