8503|17

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE中文显示的问题 [复制链接]

以下我做了不同平台的测试
第一个平台是Default language为中文(中国)
第二个平台是Default language为英语(英文)
第三个平台是Default language为英语(英文),并加入MUI多国语言的支持.

应用程序代码如下:
char   cTest[]   =   {"测试菜单"};   
WCHAR   wcTest[10]   =   {0};   
LPWSTR   wpStrTest   =   wcTest;   
int iRet   =   0;   
iRet   =   MultiByteToWideChar(CP_ACP,0,cTest,8,wpStrTest,8);   
  if(iRet   ==   0)   
  {   
  iRet   =   GetLastError();   
  RETAILMSG(1, (_T("erorr = 0x%x\r\n"), iRet));
  return;
  }   
MessageBox(wpStrTest,wpStrTest,MB_OK);          // 第一个对话框
MessageBox(_T("测试"),_T("中文"));                // 第二个对话框

在第一个平台下,两个对话框都能正常中文标题及内容;
在第二个平台下,第一个对话框标题及内容都是乱码,第二个对话框正常显示中文;
在第三个平台下,先把用户界面语言切换到中文(中华人民共和国),重新启动系统,这时系统运行在中文界面下,说明多国语言的支持是成功的;在运行应用程序,第一个对话框还是显示乱码,第二个对话框正常显示中文。

怎么才能使后面两个平台也能正常显示中文对话框呢?
其实我的目的是想在只支持英语的CE系统下,通过加载不同的字体库来显示文本中的内容,现在显示中文都遇到了问题,还请大家帮忙一下!谢谢
此帖出自WindowsCE论坛

最新回复

你用vs2005以上是不是容易点?我试过好用啊  详情 回复 发表于 2009-3-24 16:08
点赞 关注
 

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
问题出在MultiByteToWideChar上。
英文系统下,MultiByteToWideChar是有问题的。
可以考虑用mbstowcs()。
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果没有中文包,转换中文是有问题的
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 sunrain_hjb 的回复:
问题出在MultiByteToWideChar上。
英文系统下,MultiByteToWideChar是有问题的。
可以考虑用mbstowcs()。

用mbstowcs也一样出来的还是乱码。
在英文系统下,应用程序里加载中文字库
        LOGFONT lf;
        memset(&lf, 0, sizeof(LOGFONT));       // Zero out the structure.
        lf.lfHeight = 18;                      // Request a 12-pixel-height font.
        lf.lfCharSet = DEFAULT_CHARSET;        //CHINESEBIG5_CHARSET;
        lstrcpy(lf.lfFaceName, _T("simsun"));   // Request a face name "Arial".
        BOOL bFlag = font.CreateFontIndirect(&lf);

        GetDlgItem(IDC_STATIC_LAN)->SetFont(&font);
        GetDlgItem(IDC_STATIC_LAN)->SetWindowText(_T("语言测试ee11"));
这样能正常显示文本,但把TXT文本的内容显示出来英文是正常的,但中文出来乱码
代码如下:
HANDLE mFile;
DWORD dwSize,ReadSize=0,cbyte=0;
int len=0;
CString str = _T("\\ResidentFlash\\test1.TXT");
mFile=CreateFile(str,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
dwSize = GetFileSize (mFile, NULL) ;
char* databuf;
CString str1="";
databuf=new char[dwSize+2];
memset(databuf,0,dwSize+2);
SetFilePointer(mFile,ReadSize,NULL,FILE_BEGIN);
ReadFile(mFile,databuf,dwSize,&cbyte,NULL);

LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));       // Zero out the structure.
lf.lfHeight = 18;                      // Request a 12-pixel-height font.
lf.lfCharSet = DEFAULT_CHARSET;        //CHINESEBIG5_CHARSET;
lstrcpy(lf.lfFaceName, _T("simsun"));   // Request a face name "Arial".
BOOL bFlag = g_font.CreateFontIndirect(&lf);  // Create the font.         font为全局变量

TCHAR *pbuf=new TCHAR[dwSize+2];
memset(pbuf,0,(dwSize+2)*2);
//int tmp = MultiByteToWideChar(CP_ACP,0,databuf,strlen(databuf),pbuf, strlen(databuf));
int tmp = mbstowcs(pbuf, databuf, strlen(databuf));
RETAILMSG(1,(_T("len = %d dwSize = %d tmp = %d\r\n"), strlen(databuf), dwSize, tmp));        //
GetDlgItem(IDC_VIEW_EDIT)->SetFont(&g_font);
SetDlgItemText(IDC_VIEW_EDIT,pbuf);
               
CloseHandle(mFile);
delete []pbuf;
delete []databuf;
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 ultrapro 的回复:
如果没有中文包,转换中文是有问题的

为什么直接显示的可以,如_T("中文测试");但显示文本中的内容就不行呢?
此帖出自WindowsCE论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

6
 
3楼的代码里,忘了写最开始初始化的了
这里加上
int temp;
temp = ::AddFontResource(_T("\\SDMEM\\simsun.ttc"));
::SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
if(temp == 0)
RETAILMSG(1, (_T("AddFontResource error = 0x%x\r\n"), GetLastError()));
此帖出自WindowsCE论坛
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

7
 
注意MultiByteToWideChar的第一个参数
此帖出自WindowsCE论坛
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 91program 的回复:
注意MultiByteToWideChar的第一个参数



CodePage
[in] The code page to be used to perform the conversion. This parameter can be given the value of any code page that is installed or available in the system.
You can also specify one of the values shown in the following table.

Value Description
CP_ACP ANSI code page
CP_MACCP Not supported
CP_OEMCP OEM code page
CP_SYMBOL Not supported
CP_THREAD_ACP Not supported
CP_UTF7 UTF-7 code page
CP_UTF8 UTF-8 code page


这些我的试过了,还是不行啊。
还有在上冇的代码最后把文本通过串口打印出来能正常显示中文的。
RETAILMSG(1, (_T("data %s"), pbuf));可是通过SetDlgItemText或SetWindowText函数来显示就是显示出来乱码!郁闷啊!
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
你到这里看下,可以用DM测试一下。
我觉得还是你转换的问题,系统本身应该是支持中文的。
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
[url=http://www.cnblogs.com/we-hjb/archive/2008/11/27/1342651.html][/url]
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
SetDlgItemText()乱码还有一个可能就是没有设置资源文件的语言。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 sunrain_hjb 的回复:
SetDlgItemText()乱码还有一个可能就是没有设置资源文件的语言。

资源文件的语言设置了,选的是Chinese(P.R.C)
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 sunrain_hjb 的回复:
http://www.cnblogs.com/we-hjb/archive/2008/11/27/1342651.html


这个我看过,运行DM是可以正常显示里面的中文的。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

14
 
用这个转:
MultiByteToWideChar(936,0,cTest,8,wpStrTest,8);
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 
是不是需要额外添加中文字库,看看添加后效果
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 12 楼 billy14 的回复:
引用 9 楼 sunrain_hjb 的回复:
http://www.cnblogs.com/we-hjb/archive/2008/11/27/1342651.html


这个我看过,运行DM是可以正常显示里面的中文的。


那说明还是转换的问题,
试试看singlerace大侠的方法。
此帖出自WindowsCE论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

17
 
系统默认的语言修改为中文就OK了,我们也遇到过同样的问题啊
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

18
 
你用vs2005以上是不是容易点?我试过好用啊
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表