📄 subject_19522.htm
字号:
<p>
序号:19522 发表者:杰克 发表日期:2002-10-29 15:38:50
<br>主题:VC界面开发
<br>内容:我想利用VC开发支持多种语言的东东,不过不知道怎么下手,请问那位愿意帮助,最好有代码!<BR>谢谢
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:徐景周 回复日期:2002-10-29 16:31:45
<br>内容:可以参看:<BR>http://www.copathway.com/cndevforum/subject_view.asp?subject_id=17385&forum_id=
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Waynew Hsu 回复日期:2002-10-30 07:01:05
<br>内容:支持多种语言涉及到Unicode的问题。单纯的把菜单做成多个语种是没有用的。多种语言如果用8位的ASII这256个符号显然不够。别的不说就单是汉字就没办法来表示,更别说还有日语,韩语(通称为CJK),等等。。<BR><BR>而引进了16位的宽字符就可以解决这个问题(可以认为是Unicode),0x0000-0xffff涵盖了所有的书写符号。<BR><BR>Windows函数库在涉及到字符操作的方面有两套函数(有少数例外),以A为后缀的是基于ASII,以W为后缀的是基于WIDE CHAR,可以认为就是UNICODE.<BR><BR>我们大多数人编程时实际上是用的A后缀的函数。<BR><BR>以MessageBox为例,一般情况下我们使用这样的句子:<BR><BR>static char cBuffer[] = "Hello!"; <BR>MessageBox(NULL, cBuffer, cBuffer, MB_OK);<BR><BR>实际上Windows把它看作是:<BR><BR>static char cBuffer[] = "Hello!"; <BR>MessageBoxA(NULL, cBuffer, cBuffer, MB_OK);<BR><BR><BR>"Hello!"这个串在内存中占有6个字节。但如果用宽字符编码的话,它则要占用12个字节,不足部分补0。在内存中以如下形式存储<BR><BR>48 00 65 00 6c 00 6f 00 21 00<BR><BR>而我们概念中的字串是以0结尾的,就是说如果用普通的函数求这个字串的长度的话,它只有1。<BR><BR>所以要使用对应的函数。<BR><BR>上面的例子用宽字符就是如下形式:<BR><BR>static wchar_t a[] = L"HELLO!";<BR>MessageBoxW(NULL, cBuffer, cBuffer, MB_OK);<BR><BR>为了解决这个问题,Windows定义了新的数据类型TCHAR,<BR><BR>typedef char CHAR;<BR><BR>typedef wchar_t WCHAR;<BR><BR>#ifdef UNICODE<BR>typedef WCHAR TCHAR;<BR>#else<BR>typedef char TCHAR;<BR>#endif<BR><BR>这样在你的程序中定义字符串时前面用类似的方法就可以了<BR><BR>static TCHAR a[] = TEXT("HELLO!");<BR><BR>而对应的函数在Windows中则是这样定义的:<BR>#ifdef UNICODE<BR>#define MessageBox MessageBoxW<BR>#else<BR>#define MessageBox MessageBoxA<BR>#endif<BR><BR>所以上面的例子如果想实现支持多语种的话,就应该改写成:<BR><BR>static TCHAR a[] = TEXT("HELLO!");<BR>MessageBoxW(NULL, cBuffer, cBuffer, MB_OK);<BR><BR>在编译的时候,Preprocessor definitions应加上UNICODE选项。<BR><BR>需要注意的是,除了少数例外,Windows98上不能运行Unicode版的Windows程序。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -