OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4816|回复: 16

emWin配套多语言包生成器V1.0

[复制链接]

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
发表于 2017-12-25 16:32:22 | 显示全部楼层 |阅读模式
做界面每次被多语言搞得要死,干脆自己动手做了个小工具。

QQ图片20171225162428.png QQ图片20171225162312.png
emWin配套多语言包生成器V1.0.rar (204.76 KB, 下载次数: 206)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-12-25 17:13:12 | 显示全部楼层
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2017-12-26 20:23:36 | 显示全部楼层
我还以为 能让 GUI Builder, 支持中文输入, 看来是我多 想了,;
;
如果有哪 位大侠能让 GUI Builder 支持中文输入, 那才是神器一件;
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2017-12-28 10:00:30 | 显示全部楼层
wlq390934605 发表于 2017-12-26 20:23
我还以为 能让 GUI Builder, 支持中文输入, 看来是我多 想了,;
;
如果有哪 位大侠能让 GUI Builder 支持 ...

1、 用我的工具生成语言包。
2、 用GUIBuilder做界面,在要写中文或其他语言的地方按你的需求写就行了,位置1显示不正常没关系,位置2显示正常就行。(此处即保证输入的内容在当前windows系统编码下是可以正常显示的)。
1.png
3、 设计好界面后保存为C文件,用notepad++打开,将文件编码格式转换为UFT-8并保存。
2.png
4、 在GUI初始化的时候设置系统默认字体为语言包中的某个字体,或者在空间回调函数的初始化条件中设置单个控件的字体为语言包中的某个字体。
5、 到此即可在GUI中正确显示中文。

此处用法的原理在于只需要保证语言包中的编码和使用的时候的编码一致,即可正确显示。当然语言包中需要包含你显示的内容,否则将找不到字体点阵信息。

但个人认为GUIBuilder工具只是方便初学者上手和前期界面效果设计,其生成的代码并不适合作为多语言系统使用,所有的显示内容都直接以字符串的形式嵌入在代码的各个位置,不便于统一管理。
建议在所有使用显示内容字符串的地方都用ID号(或指针)表示,这样对于不同的语言,ID号是不变的,只需要重新查找到对应该语言的显示字符串即可。

希望上面的方案能帮到你。

回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2017-12-28 21:00:22 | 显示全部楼层
本帖最后由 wlq390934605 于 2017-12-28 21:06 编辑
Ihavedone 发表于 2017-12-28 10:00
1、 用我的工具生成语言包。2、 用GUIBuilder做界面,在要写中文或其他语言的地方按你的需求写就行了,位 ...

我忽然发现, 还是没弄明白怎么用呀;;
不过刚才试了下GUI Builder确实不会把_中文输入给吃了_, 但是字体选项有什么方法, 可以添加到 GUI Builder呢, 不然也还是很麻烦呀?????
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2017-12-29 09:31:12 | 显示全部楼层
本帖最后由 Ihavedone 于 2017-12-29 09:32 编辑
wlq390934605 发表于 2017-12-28 21:00
我忽然发现, 还是没弄明白怎么用呀;;
不过刚才试了下GUI Builder确实不会把_中文输入给吃了_, 但是字体 ...

自定义的字体就没办法加入到GUI Builder了,毕竟这个软件没有任何配置功能。只能在代码里自己改。
修改代码的时候,在
// USER START (Optionally insert additional code for further widget initialization)
    ...
    EDIT_SetFont(hItem, LangGetFont(LANG_SIMPLIFIEDCHINESE, FONT_SIZE_48));
// USER END
这个中间加,这样下次重新编辑界面后生成C代码不会覆盖你添加的部分。
上面我加的那句代码就是把字体设置成语言包中的自定义字体。
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2017-12-29 16:36:03 | 显示全部楼层
Ihavedone 发表于 2017-12-29 09:31
自定义的字体就没办法加入到GUI Builder了,毕竟这个软件没有任何配置功能。只能在代码里自己改。
修改 ...

那就只能弄个文体自动替换的工具了
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2017-12-29 16:37:55 | 显示全部楼层
本帖最后由 wlq390934605 于 2017-12-29 16:44 编辑
Ihavedone 发表于 2017-12-29 09:31
自定义的字体就没办法加入到GUI Builder了,毕竟这个软件没有任何配置功能。只能在代码里自己改。
修改 ...

我还有个问题想请教大哥一下, 就是关于EMWIN 仿真, 窗体边框, 怎么设置成其它正常一点的;
;

捕获.PNG
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2018-1-2 13:55:37 | 显示全部楼层
wlq390934605 发表于 2017-12-29 16:37
我还有个问题想请教大哥一下, 就是关于EMWIN 仿真, 窗体边框, 怎么设置成其它正常一点的;
;

哪个边框?这个有点像Iphone的黑框框?这个没法通过emWin改的。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-10-10
在线时间
4 小时
发表于 2018-1-2 21:56:13 | 显示全部楼层
谢谢,学习一下!
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-1-4 14:50:35 | 显示全部楼层
Ihavedone 发表于 2018-1-2 13:55
哪个边框?这个有点像Iphone的黑框框?这个没法通过emWin改的。

前几周, 学了下SDL2,  窗口图形, 多线程;  发现这个可能存于EMWIN 仿真的Simulation文件夹中的Simulation.res 资源文件中, 可能以图片的形式存在,  但是呢, 这个道行不够呀, 没法改;
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-1-4 14:57:30 | 显示全部楼层
本帖最后由 wlq390934605 于 2018-1-4 15:07 编辑
Ihavedone 发表于 2018-1-2 13:55
哪个边框?这个有点像Iphone的黑框框?这个没法通过emWin改的。

所以既然没法简单改, 那自然就得方法:

我总结了两个方案:
1: 用SDL2 Windows最最底层的图形操作手段, 加最最原生态多线程, 把EMWIN重新移植; (但是比较忙, 而且很多事要做, 没法一下子干出来);
;
2: 然后就是方案2, 直接在EMWIN仿真初始化之后紧跟 一段窗口参数重置; 但是我查了很多书,发现只有窗口创建的, 然而并没有实现更改窗口的记录; 但是我相信这个绝对是有的, 只是Windows方面 关于这些东西藏的很深, 并不像EMWIN LINUX的手册一样全部都给列出来
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2018-1-5 13:36:36 | 显示全部楼层
wlq390934605 发表于 2018-1-4 14:57
所以既然没法简单改, 那自然就得方法:

我总结了两个方案:

这个只是仿真器的窗口,也就是只在电脑上方针才有,就跟你聊QQ一样,他给你提供一个窗口,里面的内容还是你自己写。
所以emWin实现的窗口是那个黑框框里面的部分,最终显示在设备界面上的也是里面的部分,那个黑框框不会显示。
所以没搞懂你要换掉那个框框干啥。
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-1-5 15:47:05 | 显示全部楼层
Ihavedone 发表于 2018-1-5 13:36
这个只是仿真器的窗口,也就是只在电脑上方针才有,就跟你聊QQ一样,他给你提供一个窗口,里面的内容还是 ...

EMWIN 不只是用在嵌入式上面的, 其实也是一款比较好的图形系统, 在有些时候把代码直接搬到其它地方可以节省移植的工作量
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-1-5 15:52:34 | 显示全部楼层
Ihavedone 发表于 2018-1-5 13:36
这个只是仿真器的窗口,也就是只在电脑上方针才有,就跟你聊QQ一样,他给你提供一个窗口,里面的内容还是 ...

电脑最底层的显示接口有两个, 一个是SDL, 另一个是DrectX; SDL可以直接用, DrectX需要有驱动; 目前正在干这个事情,  实际上也可以用更省事的方法, 那就是其接重新重置窗口配置;;
但是我并喜欢那样;
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2018-1-6 10:21:06 | 显示全部楼层
wlq390934605 发表于 2018-1-5 15:47
EMWIN 不只是用在嵌入式上面的, 其实也是一款比较好的图形系统, 在有些时候把代码直接搬到其它地方可以节 ...

还有这种操作,学习了。。。赞一个
回复 支持 反对

使用道具 举报

4

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2012-9-13
在线时间
65 小时
 楼主| 发表于 2018-1-9 08:48:19 | 显示全部楼层
wlq390934605 发表于 2018-1-5 15:52
电脑最底层的显示接口有两个, 一个是SDL, 另一个是DrectX; SDL可以直接用, DrectX需要有驱动; 目前正在干 ...

我突然想到了,其实你想把emWin用在PC端,和用在嵌入式都是一样的,都是只需要实现显示驱动接口就可以了。在emWin源码中config文件夹下的几个文件中,将接口函数改成你想要的。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 00:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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