硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1999|回复: 4
收起左侧

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

[复制链接]

68

主题

472

回帖

681

积分

金牌会员

积分
681
发表于 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显示方式还没有完全移植成功?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-1-29 12:32:47 | 显示全部楼层
回复

使用道具 举报

68

主题

472

回帖

681

积分

金牌会员

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

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

是的。
回复

使用道具 举报

68

主题

472

回帖

681

积分

金牌会员

积分
681
 楼主| 发表于 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|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 17:48 , Processed in 0.221180 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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