硬汉嵌入式论坛

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

[emWin] 汉字显示问题

[复制链接]

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2026-1-21 09:05:35 | 显示全部楼层 |阅读模式
使用原子哥的一个TextCN汉字显示例程,在原工程下汉字可以显示,但是将它编译成库之后在新工程下汉字就不能显示了,后面发现是一个文件GUI_UC_EncodeNone.c没有添加进新工程中,添加了之后汉字就能显示,是为什么一定要添加这个文件,这个文件的内容不应该已经被编译进库文件了吗?求解。


回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-21 10:30:22 | 显示全部楼层
你这个应该是早期GBK字库添加玩法吧,适配GBK编码使用的

124.png
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2026-1-21 11:06:09 | 显示全部楼层
eric2013 发表于 2026-1-21 10:30
你这个应该是早期GBK字库添加玩法吧,适配GBK编码使用的

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*                                                uC/GUI
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File        : GUI_UC_EncodeNone.c
Purpose     : Encoding routines for non unicode systems (default)
---------------------------END-OF-HEADER------------------------------
*/

#include "GUI_Private.h"

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _GetCharCode
*
* Purpose:
*   Return the UNICODE character code of the current character.
*/
static U16 _GetCharCode(const char GUI_UNI_PTR * s) 
{
    if((*s) >= 0X81)
    {
        return *(const U16 GUI_UNI_PTR *)s;
    }

    return *(const U8 GUI_UNI_PTR *)s;
}

/*********************************************************************
*
*       _GetCharSize
*
* Purpose:
*   Return the number of bytes of the current character.
*/
static int _GetCharSize(const char GUI_UNI_PTR * s) 
{
    GUI_USE_PARA(s);

    if((*s) >= 0X81)
    {
        return 2;
    }

    return 1;
}

/*********************************************************************
*
*       _CalcSizeOfChar
*
* Purpose:
*   Return the number of bytes needed for the given character.
*/
static int _CalcSizeOfChar(U16 Char) 
{
    GUI_USE_PARA(Char);

    if(Char > 0X4081)
    {
        return 2;
    }

    return 1;
}

/*********************************************************************
*
*       _Encode
*
* Purpose:
*   Encode character into 1/2/3 bytes.
*/
static int _Encode(char *s, U16 Char) 
{
    if(Char >0X4081)
    {
      *((U16*)s) = (U16)(Char);
      return 2;
    }
    *s = (U8)(Char);
    return 1;
}

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
/*********************************************************************
*
*       _API_Table
*/
const GUI_UC_ENC_APILIST GUI_UC_None = {
    _GetCharCode,     /*  return character code as U16 */
    _GetCharSize,     /*  return size of character: 1 */
    _CalcSizeOfChar,  /*  return size of character: 1 */
    _Encode           /*  Encode character */
};

const GUI_UC_ENC_APILIST GUI__API_TableNone = {
    _GetCharCode,     /*  return character code as U16 */
    _GetCharSize,     /*  return size of character: 1 */
    _CalcSizeOfChar,  /*  return size of character: 1 */
    _Encode   
};
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2026-1-21 11:12:23 | 显示全部楼层
是这样操作的,原工程因为本来就有这个文件所以没问题,库工程不添加就会有问题,但按理来说这个文件的函数和变量已经编译进库里面了,能直接调用才对,而且在库工程下添加这个文件居然没有报重复定义的错误,没想通
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-22 01:20:20 | 显示全部楼层
TomJery 发表于 2026-1-21 11:12
是这样操作的,原工程因为本来就有这个文件所以没问题,库工程不添加就会有问题,但按理来说这个文件的函数 ...

这个本来就不是在库里面的,是专门定义的一个字体。

1.png

2.png

3.png

4.png

5.png


回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2026-1-22 08:39:39 | 显示全部楼层
本帖最后由 TomJery 于 2026-1-22 11:42 编辑
eric2013 发表于 2026-1-22 01:20
这个本来就不是在库里面的,是专门定义的一个字体。
汉字显示例程中是有GUI_CM4F_L.lib和新定义的字体的实现函数,现在是把这个例程编译成一个新的库,那这个新的库就应该包含了新的字体的定义和实现,把这个新的库放入一个新的工程中,新工程也应该是有新字体的定义和实现的,能直接使用,但是现在新工程不能直接使用,还需要再次添加GUI_UC_EncodeNone.c这个文件才能使用,疑惑的是这里
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-23 10:31:06 | 显示全部楼层
TomJery 发表于 2026-1-22 08:39
汉字显示例程中是有GUI_CM4F_L.lib和新定义的字体的实现函数,现在是把这个例程编译成一个新的库,那这个新 ...

说明没添加成功,这个你得研究下了。另外这个完全没必要再封装进去,多余,而且不方便修改。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-2-24 11:02 , Processed in 0.088355 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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