【MFC】MFC的多国语言界面的实现

3 篇文章 0 订阅
2 篇文章 0 订阅

       目前很多软件都要出口到多个国家,因此为软件提供多国语言支持就成为了一个基本条件。为软件提供多国语言的支持的具体实现方法有很多,但基本原理都差不多,就是实现代码和语言包的独立,代码根据设定的语言选择语言包。

1、新建工程

新建一个MFC应用程序,单文档类型,点击“完成”。工程名称为MultiLanguages,默认语言选择为“中文”。

2、新建项目

右键点击 解决方案,添加->新建项目->MFC DLL,项目名称为MultiLanguagesEN,其他为默认。

3、插入副本

在资源视图中,右键点击 插入副本->选择 英语,使用同样的方法,为其他资源添加英文副本,并将资源视图中英文界面中的所有文本翻译成英文。

4、添加外文版

资源视图->Menu->IDR_MAINFRAME 中的 帮助 菜单下添加 英文版选项,并添加事件处理程序OnEnglish()

添加的代码如下:

void CMainFrame::OnEnglish()
{
	// TODO: 在此添加命令处理程序代码
	int iRet;
	if(TRUE == theApp.GetLang())
	{
		iRet = MessageBox(_T("确定切换到英文版本?"),_T("提示"),MB_OKCANCEL|MB_ICONINFORMATION);
	}
	else
	{
		return;
	}
	if(TRUE == IDCANCEL)
	{
		return;
	}

	theApp.SetLang(False);
	theApp.g_bRestart = TRUE;
	SendMessage(WM_CLOSE);
}

5、添加SetLang(),GetLang()

在MultiLanguages.cpp中添加函数SetLang(),GetLang()

添加的代码如下:

void CMulitiLanguagesApp::SetLang(BOOL bEnglish)
{
	CString strPath;
	AfxGetModuleFileName(AfxGetInstanceHandle(),strPath);
	int iPathLen = strPath.ReverseFind(_T('\\'));
	strPath = strPath.Left(iPathLen);

	CString strTemp;
	strTemp.Format(_T("%d"), bEnglish);
	WritePrivateProfileString(_T("English"),_T("bEnglish"), strTemp, strPath + _T("\\set.lang"));
}

BOOL CMulitiLanguagesApp::GetLang(void)
{
	CString strPath;
	AfxGetModuleFileName(AfxGetInstanceHandle(),strPath);
	int iPathLen = strPath.ReverseFind(_T('\\'));
	strPath = strPath.Left(iPathLen);

	BOOL bEnglish = GetPrivateProfileInt(_T("English"),_T("bEnglish"), 0, strPath + _T("\\set.lang"));

	return bEnglish;
}

6、添加中文版

资源视图->Menu->IDR_MAINFRAME[英语] 中的 帮助 菜单下添加 Chinese Version 选项,并添加事件处理程序OnChinese() 。添加的代码如下:

void CMainFrame::OnChinese()
{
	int iRet;

	if(FALSE == theApp.GetLang())
	{
		iRet = MessageBoxEx(AfxGetApp()->GetMainWnd()->GetSafeHwnd(),_T("Really change to Chinese version?"),_T("Information"),MB_OKCANCEL | MB_ICONINFORMATION ,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US));
	}
	else
	{
		return;
	}
	if(iRet == IDCANCEL)
	{
		return;
	}

	theApp.SetLang(TRUE);
	theApp.g_bRestart = TRUE;
	SendMessage(WM_CLOSE);
}

7、在MulitiLanguages.cpp的InitStance()函数中添加如下代码

if(FALSE == GetLang())
	{
		m_hLangDLL = ::LoadLibrary(_T("MulitiLanguagesEN.dll"));
		if( !m_hLangDLL )
		{
			AfxMessageBox(_T("Unable to load resourse MulitiLanguagesEN.dll!"));
			return FALSE;
		}
		AfxSetResourceHandle(m_hLangDLL);
	}

8、切换中英文时重启界面

在MulitiLanguages.cpp的ExitInstance()函数中添加如下代码:

int CMulitiLanguagesApp::ExitInstance()
{
	AfxOleTerm(FALSE);
	if(m_hLangDLL)
	{
		FreeLibrary(m_hLangDLL);
	}

	if(g_bRestart)
	{
		CString strFileName = _T("");
		GetModuleFileName(NULL, strFileName.GetBuffer(MAX_PATH),MAX_PATH);
		ShellExecute(NULL,_T(""),strFileName,NULL,NULL,SW_SHOWNORMAL);
		strFileName.ReleaseBuffer();

	}
	g_bRestart = FALSE;
	return CWinAppEx::ExitInstance();

9、最终的中英文界面

注意:

1、需要在Chinese Version选项属性界面修改ID号数字,不修改则会和 英文版 选项的 ID号重复

2、需要在ONCOMMAND(ID_English,&CMainFrame::On English)下手动添加ONCOMMAND(ID_Chinese,&CMainFrame::On Chinese)

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 MFC 应用程序中实现文本编辑的界面交互,您可以使用 MFC 提供的控件和类来创建一个文本编辑器。以下是一个简单的示例代码,演示如何在 MFC 中创建一个文本编辑器: 1. 创建一个 MFC 对话框应用程序。 2. 在您的对话框类中添加一个成员变量,类型为 CRichEditCtrl,例如: ``` CRichEditCtrl m_editCtrl; ``` 3. 在您的对话框类的 OnInitDialog() 函数中创建该控件,例如: ``` BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // 创建控件 CRect rect; GetDlgItem(IDC_EDIT_CTRL)->GetWindowRect(&rect); ScreenToClient(&rect); m_editCtrl.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, rect, this, IDC_EDIT_CTRL); // 设置字体和样式 CHARFORMAT2 cf; ZeroMemory(&cf, sizeof(cf)); cf.cbSize = sizeof(cf); cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | CFM_FACE | CFM_SIZE; cf.dwEffects = CFE_AUTOCOLOR; cf.yHeight = 200; // 20 point lstrcpy(cf.szFaceName, _T("Arial")); m_editCtrl.SetDefaultCharFormat(cf); return TRUE; } ``` 4. 现在您可以使用该控件的方法和属性来管理文本编辑操作。例如,插入一段文本: ``` CString strText = _T("Hello, World!"); m_editCtrl.SetWindowText(strText); ``` 5. 您还可以添加一些控件来实现一些界面交互,例如菜单、工具栏、按钮等等。例如,您可以添加一个 "保存" 按钮来保存当前文本编辑器中的内容: ``` void CMyDialog::OnBtnSave() { CString strFilePath; CFileDialog dlg(FALSE, _T("txt"), _T("untitled"), OFN_OVERWRITEPROMPT, _T("Text Files (*.txt)|*.txt||"), this); if (dlg.DoModal() == IDOK) { strFilePath = dlg.GetPathName(); CStdioFile file; if (file.Open(strFilePath, CFile::modeCreate | CFile::modeWrite)) { CString strText; m_editCtrl.GetWindowText(strText); file.WriteString(strText); file.Close(); } } } ``` 希望这个简单的示例能够帮助您开始在 MFC 应用程序中实现文本编辑的界面交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值