#MFC-中英语言切换问题 草稿1

操作流程:2023-02-24  09:03:01


 

  • 1.新建工程MFC(基于对话框),默认“中文”。
  • 2.添加多国语言资源。(Set Dialog)。
  • 3.Local设置线程语言。
  • name_combox.AddString(_T("zhong"));
        name_combox.AddString(_T("ying"));
        LANGID Language{0};
        LANGID LanguageId1 = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED);
        LANGID LanguageId2 = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
        UpdateData(false);
        int combox_number = name_combox.GetCurSel(); //选取列表框中的一个选项,索引从0开始,-1为什么都不选
        switch (combox_number)
        {
        case 0:
            
            SetThreadUILanguage(LanguageId1);
            //SetThreadUILanguage(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED));
            break;
        case 1:
            
            SetThreadUILanguage(LanguageId2);
            //SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
        
            break;     
  • 4.字符串处理的多语言版本。
  •             ①string table②添加控件、响应函数③分别在initimstance添加设置线程语言代码
  • 5.通过菜单进行语言切换,重启软件。
  • 今日问题:
  • ①Json文件的作用?②stringtable切换问题?stringtable有两个值(设置中文、英文后),它怎么知道加载哪个?怎么进行切换的?怎么与swich联动起来的?③全部为默认加载语言,都是联动好的()④不要用MessageBox,改用MessageBoxEx,即可指定消息框的语言。

 §   当在initinstance下设置线程语言时,系统会根据线程语言全部进行联动替换。(后面的都没有用,stringtable和dialog都会跟线程语言保持一致)

    CWinApp::InitInstance();

    LANGID LanguageId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);  //取得语言ID; MAKELANGID宏:主语言标识符、从语言标识符;返回语言标识符
    SetThreadUILanguage(LanguageId); //设置当前的进程区域语言

§双击控件按钮提示“重载函数已存在”

①删除与此按钮有关的代码。.h afx、.cpp begin。都是自动生成的②删除一个按钮,在重新添加一个按钮(更改按钮的ID号码) 。

§swich语句

①switch() 括号内的“表达式”必须是整数类型或者可以转换为整型的数值类型。比如:byte、short、int、char、也可以直接是整数或字符常量还有枚举,哪怕是负数都可以。需要强调的是:float、double、long和String类型是不能作用在switch语句上的。

②当switch后面括号内“表达式”的值与某个case后面的“常量表达式”的值相等时,就执行此case后面的语句。执行完一个case后面的语句后,流程控制转移到下一个case继续执行。如果你只想执行这一个case语句,不想执行其他case,那么就需要在这个case语句后面加上break,跳出switch语句。

 

  • 原文链接查看(https://www.cnblogs.com/xianyunhe/archive/2011/09/02/2163842.html)
posted @ 2023-02-24 21:35  一夏清凉  阅读(677)  评论(0)    收藏  举报