打印
[应用相关]

求助,如何在EMwin中,实现在背景图片上显示字符串与数值

[复制链接]
5481|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
求助,如何在EMwin中,实现在图片上显示字符串与数值。
我想用window控件显示一张背景图片,并在背景图片上显示文字与数值。
文字和数值是变化的,同时,文字和数值只在图片上占用很小的一块儿。

有的帖子里已经提到用WM_PAINT进行重绘,那请问,进行重绘,是不是会将整个背景图片重绘掉?
如不是,那是不是要将文字或数值占据的那一小块的背景图片,进行单独重绘?

本人新手,还望各位多多指教?

沙发
Xflyan| | 2018-5-28 21:04 | 只看该作者
文字和数值都是 TEXT 控件,你给 TEXT 控件修改内容,EMWIN 会自己去重绘的
hItem = WM_GetDialogItem(hWin, ID_TEXT_0);
TEXT_SetText(hItem,  str);

使用特权

评论回复
板凳
xyzjacky|  楼主 | 2018-5-29 10:30 | 只看该作者
本帖最后由 xyzjacky 于 2018-5-29 11:38 编辑
Xflyan 发表于 2018-5-28 21:04
文字和数值都是 TEXT 控件,你给 TEXT 控件修改内容,EMWIN 会自己去重绘的

那请问,如果我的数值是不断变化的、带小数的(来自传感器的),也是用text控件吗?请问在text控件中怎么具体实现呢?
我现在的代码中,是用GUI_DispFloat(float v, char Len);这个函数来实现的,但用这个函数,就不能用图片背景,只能用纯色的背景

使用特权

评论回复
地板
Xflyan| | 2018-5-29 16:37 | 只看该作者
如果你的要求是文字背景透明的话,那这个就复杂了,需要分层,还有一些透明控制
简单的操作就你现在这样,先重绘背景图,再显示文字,好像没有更简单的办法

使用特权

评论回复
5
21mengnan| | 2018-5-29 17:11 | 只看该作者
多种尝试一下。

使用特权

评论回复
6
xyzjacky|  楼主 | 2018-5-30 14:35 | 只看该作者
Xflyan 发表于 2018-5-29 16:37
如果你的要求是文字背景透明的话,那这个就复杂了,需要分层,还有一些透明控制
简单的操作就你现在这样, ...

嗯,我在另一个论坛里求助,有网友告诉我用透明窗口+test方式显示。

使用特权

评论回复
7
xyzjacky|  楼主 | 2018-6-13 10:53 | 只看该作者
本帖最后由 xyzjacky 于 2018-6-13 11:43 编辑

已经解决,同时也解决了ICONVIEW控件中的图片透明显示的问题。

已经解决,同时也解决了ICONVIEW控件中的图片透明显示的问题。
对于相关使用的要点以及一些问题的解释,我已经在安福莱的论坛里作了解释,并上传了我的模拟器上的代码以供大家参考和指点。

因为解释的东西较多,这里就不再码字了,就只上一张效果图吧,剩下的大家就到这个帖子里去看看:http://forum.armfly.com/forum.php?mod=viewthread&tid=86868&extra=


112550yoaqp28sspsppptd.jpg (68.91 KB )

112550yoaqp28sspsppptd.jpg

使用特权

评论回复
评论
王猫力 2019-9-27 11:06 回复TA
@braycl07 :同求 
王猫力 2019-9-26 18:08 回复TA
@braycl07 :同问 
braycl07 2019-7-30 10:37 回复TA
您好,安富莱论坛现在已经挂了,能不能麻烦您把代码示例再发一下呢。感谢! 
8
zjq985062714| | 2019-10-3 13:22 | 只看该作者
链接挂了啊,楼主,求共享

使用特权

评论回复
9
xyzjacky|  楼主 | 2019-12-26 15:44 | 只看该作者
zjq985062714 发表于 2019-10-3 13:22
链接挂了啊,楼主,求共享

稍等,我还得在我自己的资料库里找找。

使用特权

评论回复
10
zjq985062714| | 2019-12-28 18:58 | 只看该作者
xyzjacky 发表于 2019-12-26 15:44
稍等,我还得在我自己的资料库里找找。

找到了吗?

使用特权

评论回复
11
xyzjacky|  楼主 | 2019-12-30 22:17 | 只看该作者
本帖最后由 xyzjacky 于 2020-1-3 16:25 编辑

链接:https://pan.baidu.com/s/1VJ780NwR13zWZNu7DBQtwQ
提取码:8f81

EMwin中在背景图片上实现透明图标。
原安福莱论坛上的链接挂掉了,重新发一次。因为是17年发的东西,如果有不全面的地方,还请大家提出。
链接永久有效。

使用特权

评论回复
12
xyzjacky|  楼主 | 2019-12-30 22:19 | 只看该作者

有了,有了,不好意思,让你久等了。

使用特权

评论回复
13
zjq985062714| | 2019-12-31 13:42 | 只看该作者
xyzjacky 发表于 2019-12-30 22:19
有了,有了,不好意思,让你久等了。

辛苦楼主寻找,万分感谢!

使用特权

评论回复
14
xyzjacky|  楼主 | 2020-1-1 17:50 | 只看该作者
本帖最后由 xyzjacky 于 2020-1-1 17:55 编辑

下面这个是在模拟器上实现的显示透明图标,就是上面我贴出的图片,那两张图片就是在模拟器上做出来的。
模拟器是在PC机上运行的由EMwin提供的免费的一个仿真软件。当时在安福莱论坛上发的帖子,有对模拟器使用的讲解,有对代码的详细解释,当时码不少的字,没想到安福莱论坛挂了,现在再让我码那么多的字,我也码不出来了,可惜,可惜。

链接:https://pan.baidu.com/s/1CqcBlne3zZR64jzlMdS_pQ
提取码:w6ln


使用特权

评论回复
15
zjq985062714| | 2020-1-3 11:37 | 只看该作者
xyzjacky 发表于 2020-1-1 17:50
下面这个是在模拟器上实现的显示透明图标,就是上面我贴出的图片,那两张图片就是在模拟器上做出来的。
模 ...

试了一下,仿真倒是正常的透明,但是复制到STM官方的F746开发板就会显示蓝底,不知道是不是和COLOR_CONVERSION_0这个选项有关.

使用特权

评论回复
16
xyzjacky|  楼主 | 2020-1-3 16:32 | 只看该作者
本帖最后由 xyzjacky 于 2020-1-8 12:50 编辑
zjq985062714 发表于 2020-1-3 11:37
试了一下,仿真倒是正常的透明,但是复制到STM官方的F746开发板就会显示蓝底,不知道是不是和COLOR_CONVERSI ...

可能不是你说的原因。
要想在背景图片上显示透明图标,一定要用图片格式转换工具把JPG,PNG之类的图片转换成ico格式的(即所谓的图标格式,且只能是这个格式,然后再使用emWIN提供的位图片数据提取软件(emWIN官网下载的包里就自带),把图片提取成二进制格式的数据(一大堆数据)。把这些数据复制到你的程序中,以数组的形式使用它。
推荐使用IconWorkShop V6.80这个软件来制作ico格式的图片,网上有很多下载链接和教程https://wenku.baidu.com/view/b2f297d83b3567ec112d8a39.html。
记住透明图标的文件格式只能ico,哪怕你使用文件系统,存入flash中的文件,也只能是ico格式。

使用特权

评论回复
17
xyzjacky|  楼主 | 2020-1-3 16:56 | 只看该作者
本帖最后由 xyzjacky 于 2020-1-3 17:50 编辑

另一个我当年移植emWIN时的一个帖子,在本论坛中的。里面有两处细节的强调,这是我现在还能记得的细节。

https://bbs.21ic.com/icview-2405574-1-1.html

第1个细节:
关于移植,你要仔细看看这两个地方:
GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);        

pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);

我的移植不成功的问题就来自此。这两个函数代表了不同的底层驱动代码,即是说,emwin有两种接入你自己写的LCD驱动。一种的完全的IO操作(即发指令,发数据),另一种是接入你写好的画点,画直线这些函数。

你仔细看安福莱的教程就能明白。我开始就是没有弄清楚。

第2个细节:
我具体参考的是哪一个安福莱的版本我也记不清楚了,因为是17年的事情了。
我记得当时我从网上下载了几个安福莱的教程,看完后仍不成功,于是又在网上看网友的帖子,最后发现安福莱的教程里有两个细节没有讲清楚,把这几个细节弄好后,就成功了。我于是还在安福莱的论坛上发了一个帖子讲解。可惜安福莱的论坛也挂了,我也不记得当时是哪两个细节了。
你要做SPI屏的显示,先参考野火或者正点原子的显示屏驱动程序,只不过要把他们的LCD屏驱动,换成你的SPI驱动。然后参考安福莱的教程来做EMWIN。
步骤:
1.确认你的SPI读写函数正确。(能实现读写W25Q64就算成功)
2.用已成功的SPI读写函数,去驱动你的SPI屏,实现画点和画线,以及,实现从SPI屏读取其RAM数据,即屏幕点阵上的颜色的数值(显示透明图标必须用到)。
3.将画点函数、画线函数、读回RAM数据的函数移植到EMWIN中。
以上就是主要步骤。期间你还要自己调整一些东西。

使用特权

评论回复
18
xyzjacky|  楼主 | 2020-1-3 17:05 | 只看该作者
本帖最后由 xyzjacky 于 2020-1-3 17:48 编辑

另外,我再找一找我的纸质笔记本,我有习惯记工作笔记,我找找看当时有没有把这些移植细节记下来。
硬件上显示肯定是没有问题的。下面是后来在我的硬件上跑的效果。(我的硬件还只是F103的)
        跑emWIN的demo效果小视频:
       
        跑我产品的程序的效果截图与小视频:
   
   







使用特权

评论回复
19
xyzjacky|  楼主 | 2020-1-3 20:08 | 只看该作者
各位:
     安福莱的帖子已经找回来了。安福莱论坛改了名称和域名了,以下我以前那片帖子的新地址:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86868&page=1#pid136301

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

112

帖子

4

粉丝