高级会员
注册日期: 06-11
帖子: 1527
精华: 15
现金: 6353 标准币
资产: 6353 标准币
|
回复: 多语言设置sample
new4.GetMultiLanguageDlg.cpp
// GetMultiLanguageDlg.cpp : implementation file
//
#include "stdafx.h"
#include "hyh.h"
#include "GetMultiLanguageDlg.h"
#include "CDialogTwo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGetMultiLanguageDlg dialog
extern CString g_szLanguagePath; //保存语言文件的路径
extern CString g_szSettingPath; //保存设置的文件路径
extern CString g_szCurPath; //保存当前路径
CGetMultiLanguageDlg::CGetMultiLanguageDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGetMultiLanguageDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGetMultiLanguageDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CGetMultiLanguageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGetMultiLanguageDlg)
DDX_Control(pDX, IDC_COMBO1, m_cmbLang);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGetMultiLanguageDlg, CDialog)
//{{AFX_MSG_MAP(CGetMultiLanguageDlg)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CGetMultiLanguageDlg::LoadAllLanguage()
{
CString szKey = "Language",szSection = "Setting";
CFileFind find;
bool ret = find.FindFile(g_szCurPath + "Language\\*.ini");
while(ret)
{
ret = find.FindNextFile();
if(find.IsDots() || find.IsDirectory()) continue;
CString szValue;
DWORD dwSize = 100;
if(GetPrivateProfileString(szSection,szKey,"",
szValue.GetBuffer(dwSize),dwSize,find.GetFilePath()) != 0)
{
m_cmbLang.AddString(szValue);
}
szValue.ReleaseBuffer();
}
find.Close();
DWORD dwSize = 1000;
CString szLang;
GetPrivateProfileString(szSection,szKey,"English",szLang.GetBuffer(dwSize),dwSize,g_szSettingPath);
szLang.ReleaseBuffer();
m_cmbLang.SelectString(-1,szLang);
}
/////////////////////////////////////////////////////////////////////////////
// CGetMultiLanguageDlg message handlers
BOOL CGetMultiLanguageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//查找所有可用语言,装入下拉列表框
LoadAllLanguage();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/*********************************************************************
* 函数名称:g_SetDialogStrings(CDialog *pDlg,UINT uDlgID)
* 说明: 当对话框运行时获取其所有可得到的字符串,并保存到语言文件中
每个控件用对话框ID和控件ID唯一标识
* 入口参数:
* CDialog *pDlg -- 对话框的指针
* UINT uDlgID -- 该对话框的ID
* 作者: Geng
*********************************************************************/
void g_SetDialogStrings(CDialog *pDlg,UINT uDlgID)
{
CString szSection = "String";
CString szKey,szText;
bool bSetText = 1; //1:从文件读,设置对话框
//0:从对话框读,保存到文件
if(bSetText) //1:从文件读,设置对话框
{
CString szDefault = "";
DWORD dwSize = 1000;
char* pData = (char*)malloc(dwSize);
//读对话框标题
szKey.Format("IDD%d_Title",uDlgID);
if(GetPrivateProfileString(szSection,szKey,szDefault,
pData,dwSize,g_szLanguagePath) != 0)
{
pDlg->SetWindowText(pData);
}
//写入各个子控件的标题文字
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
while(pWnd != NULL)
{
szKey.Format("IDD%d_%d",uDlgID,pWnd->GetDlgCtrlID());
if(GetPrivateProfileString(szSection,szKey,szDefault,
pData,dwSize,g_szLanguagePath) != 0)
{
pWnd->SetWindowText(pData);
}
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
//释放内存
free(pData);
}
else //0:从对话框读,保存到文件
{
//写入对话框标题
szKey.Format("IDD%d_Title",uDlgID);
pDlg->GetWindowText(szText);
WritePrivateProfileString(szSection,szKey,szText,g_szLanguagePath);
//写入各个子控件的标题文字
CWnd* pWnd = pDlg->GetWindow(GW_CHILD);
while(pWnd != NULL)
{
szKey.Format("IDD%d_%d",uDlgID,pWnd->GetDlgCtrlID());
pWnd->GetWindowText(szText);
WritePrivateProfileString(szSection,szKey,szText,g_szLanguagePath);
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
}
}
//extern CString szLanguageValue;
void CGetMultiLanguageDlg::OnSelchangeCombo1()
{
CString szValue;
m_cmbLang.GetLBText(m_cmbLang.GetCurSel(),szValue);
CHyhApp *pApp= (CHyhApp*)AfxGetApp();
pApp->languageSel= szValue;
((CHyhApp*)AfxGetApp())->LoadLanguage(szValue);
// ((CHyhApp*)AfxGetApp())->LoadLanguage(pApp->languageSel);
// view->szLanguageValue=szValue;
// ((CHyhApp*)AfxGetApp())->LoadLanguage(view->szLanguageValue);
//改变菜单语言
// SetMenuStrings();
DrawMenuBar(); //刷新菜单显示
//刷新对话框的语言显示
g_SetDialogStrings(this,IDD);
Invalidate(false);
}
void CGetMultiLanguageDlg::OnOK()
{
CHyhApp *pApp= (CHyhApp*)AfxGetApp();
// ((CHyhApp*)AfxGetApp())->LoadLanguage(pApp->languageSel);
AfxMessageBox(pApp->languageSel);
CCDialogTwo DialogTwo;
DialogTwo.DoModal();
CDialog::OnOK();
}
|