ucGUI汉字处理的一些问题

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 23:38   11   0

ucGUI汉字处理的一些问题

一些朋友问我在用ucGUI时汉字处理遇到的问题,现在我把它写下了,实际上现在我用的这个版本,对汉字的处理已经很好了.

ucGUI版本3.94

这个版本以上应用支持双字节的处理了,比如中文,日文等。

我在这个版本上处理了3个问题,基本上汉字的处理都可以了.不管是显示,修改,输入法.

1:汉字字库

要实现汉字双字节的显示,只要用其相应的工具把一个字库转换成点阵就好了。

指定控件相应的字体就能显示了,但还有一个问题,虽然能正常显示了,当用汉字输入到EDIT等控件时,移动光标,可以看到移动是的半个汉字,这样就出问题了,出现这样的问题就是计算字符个数时出错了。

还要做如下的处理:

2:调用GUI_UC_SetEncodeGBK()

在程序开始时调用 GUI_UC_SetEncodeGBK()这个过程就可以了,实际上就是初始化 GUI_Context.pUC_API的一个指针,这个包含了计算字符的宽度,大小等过程。


如下的代码:

/*********************************************************************
*
* _API_Table
*/
static const GUI_UC_ENC_APILIST _API_Table_GBK = {
_GetCharCode, /* return character code as U16 (Unicode) */
_GetCharSize, /* return size of character: 1/2/3 */
_CalcSizeOfChar, /* return size of character: 1/2/3 */
_Encode /* Encode character into 1/2/3 bytes */
};


/*********************************************************************
*
* Exported code
*
**********************************************************************
*/
/*********************************************************************
*
* GUI_UC_SetEncodeGBK
*/
void GUI_UC_SetEncodeGBK(void) {
GUI_LOCK();
GUI_Context.pUC_API = &_API_Table_GBK;
GUI_UNLOCK();
}


3:一个BUG处理

如上处理后,EDIT等控件能正常显示和修改修入汉字了。

但在我使用的过程中发现了一个BUG,几次修改EDIT控件的值(包括汉字时),在字符结尾处就出现了乱码。正常的字符都显示出来了。

通过跟踪发现,需要对一个方法更改:

/*********************************************************************
*
* GUICharLine.c GUI_GetLineDistX
*
* This routine is used to calculate the length of a line in pixels.
*/
int GUI__GetLineDistX(const char GUI_UNI_PTR *s, int MaxNumChars) {
int Dist = 0;
if (s) {
U16 Char;
#if GUI_COMPILER_SUPPORTS_FP
if (GUI_Context.pAFont->pafEncode) {
return GUI_Context.pAFont->pafEncode->pfGetLineDistX(s, MaxNumChars);
}
#endif

while (--MaxNumChars >= 0) {

Char = GUI_UC__GetCharCodeInc(&s);
if(Char == 0) //jhting: 2012-09-26 Edit_ display GBK BUG
break;

Dist += GUI_GetCharDistX(Char);
}
}
return Dist;
}

红色字体就是我加入的,应这个方法里转入的长度是按单字节来计算的,没有考虑双字节,在while里就会出现读到串尾后面的值,而使EDIT等这样的控件出现显示乱的字符.


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP