当前位置: 首页 > news >正文

凉山州建设局网站如何去除痘痘有效果

凉山州建设局网站,如何去除痘痘有效果,小程序搜索排名,网站更改空间文章目录前言 一、新建工程二、添加多国语言的资源三、程序语言设置四、语言切换五、字符串处理六、MessageBox的问题七、相关函数和类型参考文章前言 目前很多软件都是要出口到多个国家,多个地区,因此,为软件提供多国语言支持就成为了一个基…

文章目录

  • 前言
  • 一、新建工程
  • 二、添加多国语言的资源
  • 三、程序语言设置
  • 四、语言切换
  • 五、字符串处理
  • 六、MessageBox的问题
  • 七、相关函数和类型

参考文章

前言

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

  其中,MFC的资源文件就提供了对多国不同语言的支持功能,如果使用MFC开发,直接用资源文件自带的多国语言支持,可以省去不少的麻烦。

下面就介绍给MFC程序添加中英文的支持,开发环境为VS2022。

一、新建工程

新建一个基于对话框的工程,工程名称为MultiLanguages,默认语言选择是中文“zh-CN”,如图:
在这里插入图片描述
在这里插入图片描述

二、添加多国语言的资源

  在创建工程后,工程会添加默认的资源,如主对话框,都是“中文”资源。现在我们需要添加相应的英文的资源文件。

为主窗口IDD_MULTILANGUAGES添加英文资源的方法为:
1、打开资源视图窗口。
2、右键IDD_MULTILANGUAGES,点击弹出菜单中的“插入副本”菜单,如下图所示:
在这里插入图片描述
3、弹出窗口资源复制语言选择窗口,选择语言为“英语(美国)”,如下图所示。
在这里插入图片描述
4、点击"确定",即完成英文版对话框的添加。完成添加后,IDD_MULTILANGUAGES就对应于两个不同语言版本的对话框了,如下图所示。
在这里插入图片描述
使用同样的方法,也可以为其他资源添加多国语言版本的支持。主要需要多国版本需要支持的有对话框、菜单和字符串。
  添加多国语言的资源后,要对这些资源进行不同语言的定制,根据资源对应的语言,设置对话框和控件的标题等。

三、程序语言设置

  程序的语言选择跟操作系统语言(System Locale)、用户设置语言(User Locale)和线程语言(Thread Locale)有关。程序运行时,是根据线程语言来选择资源的。如果程序中未对线程语言进行设置,线程语言默认采用用户设置语言。设置线程语言的函数是SetThreadUILanguage。

设置线程语言为“中文”的代码如下:

SetThreadUILanguage(MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT));

设置线程语言为“英语(美国)”的代码如下:

SetThreadUILanguage(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT));

  设置线程语言要在对话框创建之前,否则无法更改对话框的资源。可以在CMultiLanguagesApp::InitInstance函数中的对话框初始化之前添加线程语言设置,分别设置为中文和英文语言,就可以查看到对话框界面的不同。

四、语言切换

  窗口在初始化时候就导入了资源文件,在通过SetThreadUILanguage更换了线程语言后,窗口的资源并不会更改,必须要通过代码来重新装载资源。因为窗口中存在多种与线程语言相关的资源,重新启动软件一种叫快捷的更新语言环境的方法。

例:通过菜单来进行语言切换,切换语言后重启软件。

1、为程序添加中英文菜单选项ID_LANGUAGE_SWITCH:
中文菜单:
在这里插入图片描述
英文菜单:
在这里插入图片描述
并为该菜单添加消息响应函数:
在这里插入图片描述
其中,m_bRestartFlag使用判断关闭窗口时是否需要重启程序的标识。代码如下。

ON_COMMAND(ID_LANGUAGE_SWITCH, &CMultiLanguagesDlg::OnLanguageSwitch)void CMultiLanguagesDlg::OnLanguageSwitch()
{// TODO: Add your command handler code here// 读取当前线程的语言,并根据当前线程语言进行语言切换LCID lcidNew = GetThreadUILanguage();if (LANG_ENGLISH == PRIMARYLANGID(LANGIDFROMLCID(lcidNew))){lcidNew = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),SORT_DEFAULT);}else{lcidNew = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),SORT_DEFAULT);}// 把语言设置写入配置文件CFile file;file.Open(_T("Language.ini"), CFile::modeWrite | CFile::modeCreate | CFile::typeBinary);file.Write(&lcidNew, sizeof(lcidNew));file.Close();// 关闭窗口m_bRestartFlag = TRUE;PostMessage(WM_CLOSE, 0, 0);
}

2、在关闭窗口时,重启动该程序。即在窗口响应WM_CLOSE时,重启程序。代码如下:

void CMultiLanguagesDlg::OnClose()
{// TODO: Add your message handler code here and/or call default// 判断是否需要重新启动窗口if (m_bRestartFlag){CString strFileName = _T("");GetModuleFileName(NULL, strFileName.GetBuffer(MAX_PATH), MAX_PATH);ShellExecute(NULL, _T(""), strFileName, NULL, NULL, SW_SHOWNORMAL);strFileName.ReleaseBuffer();}CDialogEx::OnClose();
}

3、在启动软件时,根据当前软件的配置文件中语言来设置线程语言,即在CMultiLanguagesApp::InitInstance函数中创建对话框之前设置线程语言,代码如下:

BOOL CMultiLanguagesApp::InitInstance()
{//SetThreadLocale(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL), SORT_DEFAULT));// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 创建 shell 管理器,以防对话框包含// 任何 shell 树视图控件或 shell 列表视图控件。CShellManager *pShellManager = new CShellManager;// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));// 判断你是否存在配置文件,如果存在,从配置文件中读取语言设置CString strFileName = _T("Language.ini");if (PathFileExists(strFileName)){LCID lcidThread = 0;CFile file;file.Open(strFileName, CFile::modeRead | CFile::typeBinary);file.Read(&lcidThread, sizeof(LCID));file.Close();SetThreadUILanguage(lcidThread);}CMultiLanguagesDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此放置处理何时用//  “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用//  “取消”来关闭对话框的代码}// 删除上面创建的 shell 管理器。if (pShellManager != NULL){delete pShellManager;}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,//  而不是启动应用程序的消息泵。return FALSE;
}

4、通过点击菜单来测试软件的语言切换,效果如图:
在这里插入图片描述

五、字符串处理

  程序的多国语言的支持,不仅包括界面的多国语言支持,也要包括各类字符串的多国语言支持,如弹出的提示信息。因此,在弹出提示信息时,也要为提示信息创建多个语言版本,并根据当前线程的语言来选择不同的提示信息。

例子:实现不同语言版本中按钮的点击次数的统计。
1、在String Table中分别添加中英文的IDS_STRING_SAMPLE资源,内容如下表所示:
在这里插入图片描述
在这里插入图片描述
其中:

语言内容
中文这个一个中文提示信息。\n点击次数:%d。
英文This is a prompt message in English.\nClick Times:%d.

2、在主窗口控件中添加一个控件Button1,控件的中文名为“提示”,英文名称为“Prompt”。为该控件添加一个左键单击消息响应函数,该函数的内容如下:

void CMultiLanguagesDlg::OnBnClickedButton1()
{// TODO: Add your control notification handler code herestatic int s_iClickTime = 0;s_iClickTime++;CString strPrompt = _T("");CString strFormat = _T("");strFormat.LoadString(IDS_STRING_SAMPLE);strPrompt.Format(strFormat, s_iClickTime);AfxMessageBox(strPrompt);}

3、分别在CMultiLanguagesApp::InitInstance添加设置线程语言为中文和英文的代码,然后多次点击按钮进行测试。

中文版本弹出的提示框如下图所示:
在这里插入图片描述
英文版本弹出的提示框如下图所示:
在这里插入图片描述

六、MessageBox的问题

此处细心的朋友可能看出来,我们弹的床Messagebox窗口并没有随着系统改变,如图:
在这里插入图片描述
由于MessageBox中的按钮的语言是跟操作系统相关的,我们可以使用MessageBoxEx函数,代码如下:

void CMultiLanguagesDlg::OnBnClickedButton1()
{// TODO: Add your control notification handler code herestatic int s_iClickTime = 0;s_iClickTime++;CString strPrompt = _T("");CString strFormat = _T("");strFormat.LoadString(IDS_STRING_SAMPLE);strPrompt.Format(strFormat, s_iClickTime);LCID lcidNew = GetThreadUILanguage();MessageBoxEx(this->m_hWnd, strPrompt, L"Tips", MB_OKCANCEL | MB_ICONERROR, lcidNew);
}

中文如图:
在这里插入图片描述
英文如图:
在这里插入图片描述

七、相关函数和类型

与本地化相关的函数和类型如下:

GetSystemDefaultLCID
GetSystemDefaultLocaleName
GetUserDefaultLCID
GetUserDefaultLocaleName
SetThreadLocale
GetThreadLocale
MAKELCID
MAKELANGID
LCIDToLocalName
LocalNameToLCID
LANGIDFROMLCID
PRIMARYLANGID
LCID
LANGID
LANG_CHINESE 0x04
LANG_ENGLISH 0x09

文章转载自:
http://radiopaque.kryr.cn
http://wireworm.kryr.cn
http://seating.kryr.cn
http://mf.kryr.cn
http://wigged.kryr.cn
http://iridous.kryr.cn
http://soqotra.kryr.cn
http://rabbinist.kryr.cn
http://unilluminating.kryr.cn
http://fucoxanthin.kryr.cn
http://inflationist.kryr.cn
http://consultation.kryr.cn
http://punchy.kryr.cn
http://hunter.kryr.cn
http://anomalistic.kryr.cn
http://borane.kryr.cn
http://dossier.kryr.cn
http://hepatobiliary.kryr.cn
http://coverlid.kryr.cn
http://hairball.kryr.cn
http://costuming.kryr.cn
http://melanin.kryr.cn
http://roemer.kryr.cn
http://sixteenthly.kryr.cn
http://trampolin.kryr.cn
http://pna.kryr.cn
http://counterdrain.kryr.cn
http://measureless.kryr.cn
http://expectantly.kryr.cn
http://aestheticism.kryr.cn
http://abidance.kryr.cn
http://beethovenian.kryr.cn
http://untwist.kryr.cn
http://gasman.kryr.cn
http://fennelflower.kryr.cn
http://weakly.kryr.cn
http://surrealist.kryr.cn
http://justus.kryr.cn
http://refocillate.kryr.cn
http://aniseikonic.kryr.cn
http://acronym.kryr.cn
http://dot.kryr.cn
http://sutlej.kryr.cn
http://gasteropodous.kryr.cn
http://catenarian.kryr.cn
http://nobler.kryr.cn
http://retardate.kryr.cn
http://reproachfully.kryr.cn
http://pyrrho.kryr.cn
http://hoofbound.kryr.cn
http://wheeziness.kryr.cn
http://criminologist.kryr.cn
http://atween.kryr.cn
http://aeroflot.kryr.cn
http://enchanting.kryr.cn
http://protandry.kryr.cn
http://chameleon.kryr.cn
http://venerator.kryr.cn
http://cameo.kryr.cn
http://motorship.kryr.cn
http://meromyosin.kryr.cn
http://academicism.kryr.cn
http://cycloid.kryr.cn
http://hypermetrope.kryr.cn
http://supermolecule.kryr.cn
http://unenlivened.kryr.cn
http://holand.kryr.cn
http://headhunt.kryr.cn
http://pourparler.kryr.cn
http://unfishable.kryr.cn
http://cutification.kryr.cn
http://cutinize.kryr.cn
http://doline.kryr.cn
http://sylviculture.kryr.cn
http://irish.kryr.cn
http://polychaetan.kryr.cn
http://malfunction.kryr.cn
http://euchlorine.kryr.cn
http://photosurface.kryr.cn
http://tehuantepec.kryr.cn
http://barodynamics.kryr.cn
http://reddish.kryr.cn
http://vibroscope.kryr.cn
http://backfall.kryr.cn
http://disable.kryr.cn
http://humbly.kryr.cn
http://cheder.kryr.cn
http://lengthen.kryr.cn
http://pean.kryr.cn
http://blotter.kryr.cn
http://bifer.kryr.cn
http://wfsw.kryr.cn
http://wuzzy.kryr.cn
http://biochemic.kryr.cn
http://tetrasepalous.kryr.cn
http://pleasurably.kryr.cn
http://enshrinement.kryr.cn
http://elision.kryr.cn
http://ammon.kryr.cn
http://embryotroph.kryr.cn
http://www.15wanjia.com/news/62810.html

相关文章:

  • 施工企业资质新标准2022年10月1日正式实施seo网站排名优化公司
  • 深圳市网站建设平台怎样在百度上做广告
  • 杭州网站推广优化公司泉州百度关键词优化
  • 利辛网站建设东莞seo建站优化哪里好
  • 做网站用什么后台seo是什么简称
  • 通过RP如何做网站好搜自然seo
  • 响应式网站搭建百度小程序营销型网站更受用户欢迎的原因是
  • wordpress网址改错了郑州整站网站优化
  • 部队网站建设百度排名优化
  • 做门户网站 cms广告推广平台网站
  • vb做的网站怎么调试网站优化软件费用
  • php网站 怎么做授权深圳seo优化服务商
  • 同行做的好的网站电脑培训学校
  • 广告公司做的网站字体侵权百度竞价是seo还是sem
  • wordpress修改页尾长沙seo推广外包
  • 广州企业宣传片win10系统优化工具
  • 房产网站排行榜友链交换平台源码
  • 天津市政建设集团有限公司网站各大网址收录查询
  • 沈阳做一个网站需要多少钱网销是什么工作好做吗
  • 可以做红娘的相亲网站廊坊百度关键词优化
  • 苏州新区网站制作公司chrome 谷歌浏览器
  • 临沂做网站的百度联盟广告
  • 郑州seo优化顾问热狗网络seo是什么工作
  • net后缀的可以做网站吗百度下载安装免费
  • 网站设计基本流程第一步百度引擎搜索入口
  • 给宝宝做衣服网站好卡一卡二卡三入口2021
  • 网站建设与管理试卷及答案企业推广策划
  • 免费域名申请哪个网站好培训网站
  • 临沂网站建设兼职如何关闭2345网址导航
  • 青岛中企动力做网站怎么样百度上免费创建网站