minigui4.0适配微软雅黑字体时,底层计算汉字字符的宽度不正确

mingui4.0适配微软雅黑字体时,发现minigui底层计算每个汉字或者中文字符的宽度时有误,计算英文、数字、英文字符时,宽度没有问题。

具体表现为:编辑框中(sledit控件)存在中文字符串时,点击字符串末尾位置,编辑框光标会跑到中间,没有显示在字符串最后的位置。

环境:
嵌入式开发环境,界面是minigui4.0,freetype2版本2.8.1
字体使用了minigui的矢量字体,下面是minigui字体相关的配置。

[systemfont]
font_number=9
font0=ttf-SansSerif-krncnn-*-18-ISO8859-1
font1=ttf-SansSerif-krncnn-*-18-GB2312-0
font2=ttf-SansSerif-rrncnn-*-18-UTF-8
font3=ttf-SansSerif-rrncnn-*-18-EUC-KR
font4=ttf-SansSerif-rrncnn-*-18-JISX0208-1
font5=ttf-SansSerif-rrncnn-*-18-ISO8859-2
font6=ttf-SansSerif-rrncnn-*-18-ISO8859-5
font7=ttf-SansSerif-rrncnn-*-18-ISO8859-7
font8=ttf-SansSerif-rrncnn-*-18-ISO8859-9

default=0
wchar_def=0
fixed=0
caption=0
menu=0
control=0
cvbs=2

[truetypefonts]
font_number=1
name0=ttf-SansSerif-rrncnn-0-0-ISO8859-1,ISO8859-2,ISO8859-5,ISO8859-7,ISO8859-9,GB2312-0,UTF-8,JISX0208-1,EUC-KR
fontfile0=/home/app/sysres/font/msyh.ttf

上面说错了,字体使用了minigui的逻辑字体

你好,看起来是 MiniGUI 底层计算汉字宽度的问题。你可以尝试以下解决方法:

1、在配置文件中修改字体配置,使用一种支持汉字的字体,例如支持 GB2312 编码的字体。这样 MiniGUI 底层就可以正确地计算汉字的宽度。
例如,你可以将配置文件中的 ttf-SansSerif-krncnn--18-ISO8859-1 改为 ttf-SansSerif-krncnn--18-GB2312-0。

2、在 MiniGUI 底层代码中调整计算汉字宽度的代码,使其正确地计算汉字的宽度。
如果你对 MiniGUI 底层代码有一定的了解,可以尝试修改相关代码来解决问题。

你也可以尝试使用其他的 GUI 工具库,例如 Qt、GTK+ 等,它们都支持汉字的显示和计算宽度。

您所描述的问题可能是由于矢量字体引擎不支持微软雅黑字体导致的。可能是因为minigui的矢量字体引擎只能读取一些特定的字体格式,不能读取其他的字体。或者是因为minigui的矢量字体引擎有一些问题或不兼容的地方导致的。

您可以尝试以下解决方法:
1.使用其它字体代替微软雅黑字体,并确保它们与minigui矢量字体引擎兼容。

2.更新minigui和freetype,因为有可能是因为minigui和freetype环境不兼容所导致
希望对你有帮助,望采纳。

这个问题有可能是因为 minigui 底层使用的字体渲染库不能正确地计算中文字符的宽度导致的。另外在 minigui 配置文件中设置的字体文件可能也有关系。

可以试试以下步骤来解决这个问题:

1、确认 minigui 底层使用的字体渲染库能够正确地计算中文字符的宽度。如果不能,可以试试更换字体渲染库,例如使用 FreeType 代替原来的字体渲染库。

2、确认 minigui 配置文件中设置的字体文件是否正确。如果不是,可以试试更换字体文件,确保存在一个能够正确渲染中文字符的字体文件。

3、在 minigui 中使用正确的字符集。在 minigui 配置文件中,需要将字符集设置为支持中文字符的字符集,例如 GB2312-0。

4、在 minigui 中使用正确的字体。在 minigui 配置文件中,需要将字体设置为支持中文字符的字体,例如 ttf-SansSerif-krncnn-*-18-GB2312-0。
仅供参考,望采纳,谢谢。

可能是字体文件不正确:需要使用正确的微软雅黑字体文件,并将其加载到 MiniGUI 中。

或者是字符集不正确:微软雅黑字体中的汉字字符可能属于不同的字符集,例如 GB2312、GBK、BIG5 等。如果使用的字符集与字体文件不匹配,则会导致计算汉字字符宽度不正确。

还有可能是底层字体渲染引擎的问题: MiniGUI 4.0 使用了 FreeType 库作为字体渲染引擎,如果 FreeType 库出现了问题,则可能导致计算汉字字符宽度不正确。

最后这个我觉得不大可能:sledit 控件的问题:sledit 控件是 MiniGUI 中的一种单行编辑框控件,如果 sledit 控件的实现存在问题,则也可能导致计算汉字字符宽度不正确。

解决方案:
1.确保使用的是正确的字体文件,并将其正确加载到 MiniGUI 中。

2.确保使用的字符集与字体文件匹配,例如如果使用的是 GB2312 字符集,则应使用 GB2312 字体文件。

3.如果确定不是字体文件和字符集的问题,可以尝试升级 FreeType 库或者更换其他字体渲染引擎。

4.如果确定不是字体渲染引擎的问题,可以尝试检查 sledit 控件的实现,确保其正确计算汉字字符的宽度

关于MiniGUI中逻辑字字体随意设置大小的问题
借鉴下
https://bbs.csdn.net/topics/350130115

参考下这个实例解析:MiniGUI 体系结构之三——逻辑字体以及多字体和多字符集实现,链接:https://blog.csdn.net/HiRuyue/article/details/11703491

可以从几个方面入手:

1 检查minigui的字体配置是否正确,尤其是字体文件的路径是否正确。

2 检查字体文件是否正确,是否能够正常加载。

3 在minigui中使用freetype来处理字体。minigui的矢量字体支持较少,可能会导致显示问题。freetype可以支持更多的字体,可以尝试使用freetype来解决问题。

4 在使用freetype时,检查freetype的版本是否正确。如果使用的是旧版本的freetype,可能会导致显示问题。

希望这些信息对你有帮助!望采纳。

嵌入式环境中,因为资源有限,需要对字体进行特别处理来确保正确显示。具体来说,在minigui 4.0中,使用的是FreeType2来渲染字体。如果你使用的是微软雅黑字体,那么可能需要对FreeType2的配置进行调整来支持这种字体。

首先,可以检查一下字体文件是否能正确加载。如果文件加载正确,但是如果文件加载正确但是依然存在宽度计算错误的问题,可以考虑更换FreeType2的版本,比如试试更新到最新版本,或者使用旧版本来看看是否存在改进。

也可以检查FreeType2渲染字体时使用的配置是否正确,比如字体大小,字体质量,字体渲染模式等。

最后, 可以在minigui的代码中添加一些调试语句, 查看渲染字体时的具体错误.

如果还有疑问, 可以尝试在线上查找其他用户的相关经验.