转载:http://blog.csdn.net/guoyk1990/article/details/44337249

由于特殊原因我们需要将 MessageBox 或 Dialog 的按钮“确定”、“取消”用英文或其他语言显示。在网上查找了很多相关内容,但很多要么很麻烦,要么根本就不能实现所需效果。最后发现还是MSDN最好用。 
首先是MessageBox中如何将按钮中的文字显示为其他语言。MessageBox要使用 MessageBoxEx才可以,其定义如下:

int WINAPI MessageBoxEx(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType,
_In_ WORD wLanguageId
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

最后一个参数MSDN上给出的解释是:

wLanguageId [in] 
Type: WORD 
The language for the text displayed in the message box button(s). Specifying a value of zero (0) indicates to display the button text in the default system language. If this parameter is MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), the current language associated with the calling thread is used. 
To specify a language other than the current language, use the MAKELANGID macro to create this parameter. For more information, see MAKELANGID.

意思就是我们需要用函数MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),来生成最后一个参数。它的定义为

WORD MAKELANGID(
USHORT usPrimaryLanguage,
USHORT usSubLanguage
);
  • 1
  • 2
  • 3
  • 4

微软给我们提供了足够多的语言支持,关于这两个参数可以参见微软提供的Language Identifier Constants and Strings表格。从表格中查找相应的语言的PrimaryLanguage和SubLanguage即可。如英语为:LANG_ENGLISH 和 SUBLANG_ENGLISH_US ,可以写成MAKELANGID(LANG_ENGLISH , UBLANG_ENGLISH_US ); 
最后举一个例子:

MessageBoxEx(NULL,L"This is an English MessageBox!",L"Alert",MB_OKCANCEL,MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
  • 1

下面介绍一下如何修改Dialog中的默认按钮上的文字,这里只介绍系统定义的Dialog,如:CFileDialog。(Customer Dialog 也没有做这些的意义了,因为直接修改按钮的Caption 属性即可)。修改Dialog的默认按钮文字只需要在创建Dialog前加上一句:

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

即可,参数中MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)的使用和上文的使用方法中一样。

VS mfc MessageBox() 使用英文显示的更多相关文章

  1. 中文版Windows Server 2012 R2更改为英文显示语言

    1. 下载Windows Server 2012 R2多语言包(下载页面,直接下载链接). 2. 将win_svr_2012_r2_64bit_multi_language_lp_oem.img解压或 ...

  2. VS mfc MessageBox() 和 AfxMessageBox()

    转载:http://blog.csdn.net/phenixyf/article/details/41744039 一.MessageBox()用法 1.函数原型 Messagebox函数在Win32 ...

  3. MFC&Halcon之图片显示

    上一篇介绍了MFC调用Halcon功能的简单例子,在这个例子中,点击按钮会弹出一个窗口显示图片,但是这样显示并不美观,而且...于是我决定把显示窗口做在MFC的窗体内部. 具体的方案是:使用一个Pic ...

  4. MFC 工具栏隐藏与显示

    最近在学MFC,看的是孙鑫的VC++视频,感觉还不错.在看到第九节课的时候,讲到工具栏的时候,做了个小功能:工具栏的隐藏和显示,但是有个bug就是一个悬浮的工具栏隐藏后再显示,就会变成停靠状态.这里我 ...

  5. 【linux】英文显示乱码解决

    在linux环境中中文显示正常,而英文却显示乱码 用 echo $LANG 显示编码为 zh_CN.GB18030 解决方法: 输入 export LC_ALL=POSIX 即可

  6. MFC MessageBox AfxMessageBox

    MessageBox 一.消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.1.MessageBox("这是一个最简单的消息框!");2.M ...

  7. MessageBox不能前置显示的问题

    在MFC的开发中,经常会遇到一些莫名奇妙的问题,可能是经验不足的原因吧. 进入正题....在手头的项目中,用MFC做的界面应用.在某一天突然发现程序界面不能进行响应,经过反复的调试后发现:Messag ...

  8. .Net下一个Winform方案可以让MessageBox.Show它显示在父窗口的中间

    下面的文字,缺省值是在屏幕中间显示. DialogResult dr = MessageBox.Show("是否要删除此数据?", "删除确认", Messag ...

  9. WIN7下重建图标缓存(解决MFC.exe桌面图标显示异常问题)

    WIN7下重建图标缓存 使用WIN7时,MFC工程生成的应用程序图标,如果更改为自定义的ICON图标之后可能在桌面上显示的依旧是上一次的图标,改个名或换个路径都能恢复正常,说明在WIN7系统下图标的缓 ...

随机推荐

  1. JMeter Plugins Manager

    JMeter插件管理器官网: https://jmeter-plugins.org/ 把jmeter-plugins-manager-0.16.jar放到C:\JMeter\apache-jmeter ...

  2. MySQL☞insert value与values

    最近公司事情太忙,作为以一挑十的测试,只能苦逼的累死累活的.好不容易临近上线,可以偷个懒写个文章. 简单的说说如何向表中插入数据: 1.向表中所有的列插入数据(插入多行数据): insert  int ...

  3. jmeter☞文件目录(一)

    Jmeter的文件目录如下图: 1.bin:可执行文件目录 a.jmeter.bat:Windows环境下的启动文件 b.jmeter.log:日志文件 c.jmeter.sh:Linux环境下的启动 ...

  4. python接口测试(一)——http请求及token获取

    使用python对当前的接口进行简单的测试 1.接口测试是针对软件对外提供服务得接口得输入输出进行得测试,验证接口功能与接口描述文档得一致性 返回结果可以为字符串,json,xml等 2.接口的请求方 ...

  5. C# Lambda表达式使用累加器例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lamb ...

  6. WIN8/8.1/10换系统常见的几个问题

    1.如果高级选项中没有UEFI固件设置,这该怎么进入BIOS呢? 答:还有一种方法是,首先关闭快速启动,然后重启,开机画面出来之后按F1,F2,F12,delete,总有一个是对的(不确定的话可以四个 ...

  7. 获取src下的文件

  8. Param指南

    param name标签是在这个播放插件中嵌入的一些功能和播放参数: <param name="playcount" value="1"><! ...

  9. 计蒜客16495 Truefriend(fwt)

    #include <iostream> #include <cstring> #include <cstdio> using namespace std; type ...

  10. Codeforces Round #553 F Sonya and Informatics

    题目 题目大意 给定一个长为 $n$($2 \le n \le 100$)的01串 $S$ .对 $S$ 进行 $k$($1 \le k \le 10^9$)次操作:等概率地选取两个下标 $i, j$ ...