请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 204|回复: 4
收起左侧

[STemWin] emWin在GB2312方式下的函数GUI_DispStringAt()能一个函数里中英文混显吗?

[复制链接]

31

主题

226

帖子

288

积分

高级会员

积分
288
发表于 2019-1-29 11:43:00 | 显示全部楼层 |阅读模式
我按安富莱的教程,移植了老式GB2312的汉字显示方式,但我显示汉字的时候,用GUI_SetFont(&GUI_FontHZ16);显示半角数字字符的时候,用系统自带的字体GUI_SetFont(GUI_FONT_8X16);前者情况下不能中英文混显,比如GUI_DispStringAt("中国ABC123", 20, 56);这种情况下“中国”能显示出来,但后面的ABC123不能显示出来,必须GUI_SetFont(GUI_FONT_8X16);之后用系统字体才能显示出来,这种情况是不是我移植的GB2312显示方式还没有完全移植成功?
回复

使用道具 举报

5532

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44698
QQ
发表于 2019-1-29 12:32:47 | 显示全部楼层
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

31

主题

226

帖子

288

积分

高级会员

积分
288
 楼主| 发表于 2019-1-29 13:37:43 | 显示全部楼层
意思是在GB2312方式下,GUI_DispStringAt("XXXX", 0, 0)函数里可以中英文混显吗?
回复

使用道具 举报

5532

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44698
QQ
发表于 2019-1-29 14:17:11 | 显示全部楼层
taobaofarmer 发表于 2019-1-29 13:37
意思是在GB2312方式下,GUI_DispStringAt("XXXX", 0, 0)函数里可以中英文混显吗?

是的。
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

31

主题

226

帖子

288

积分

高级会员

积分
288
 楼主| 发表于 2019-2-1 10:52:04 | 显示全部楼层
本帖最后由 taobaofarmer 于 2019-2-1 11:38 编辑

GUI_SetFont(&GUI_FontHZ16);
GUI_DispStringAt("自检中请稍候...", 20, 56);
显示的效果如图所示,显示汉字是没有问题的,问题在显示6个汉字后面的"..."的时候,实际显示出来的是半个“候”字,显示出来的是左半部分,而且显示完一个“.”之后的X轴位移是16个点,经过单步执行发现 GUI_DispStringAt() 函数是逐次调用 GUIPROP_X_DispChar(u16 c) 函数的,也就是每次显示一个全角或者半角字符的时候,都调用一次该函数,但是当显示到半角字符 “.” 的时候,这个函数被传进来的字符内码是 对的,“.” 的内码是十进制的46,这个是没错的,然后执行 char *font = (char *)pProp->paCharInfo->pData; 这句代码,用来获取该字模的属性是全角还是半角,结果获取出来的是“H16”,也就是全角字符,然后剩下的自然是按全角字符显示下去了,所以造成了前面的显示效果,那么问题就在这里,char *font = (char *)pProp->paCharInfo->pData获取出来的为什么会是全角字符呢?
自检中.jpg
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-4-23 22:19 , Processed in 0.179302 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表