硬汉嵌入式论坛

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

[emWin] emWIn如如何使用个透明窗口

[复制链接]

15

主题

73

回帖

118

积分

初级会员

积分
118
发表于 2020-9-24 11:03:26 | 显示全部楼层 |阅读模式
因为界面刷图比较大,我想把静态的放到底层不进行刷新。动态的需要经常刷新的想用顶层透明窗口,试过好多种办法没有实现,顶层总是黑色的底色,遮挡住了底层,并没有透明显示。
再次请教各位大侠,先谢谢啦
回复

使用道具 举报

7

主题

85

回帖

111

积分

初级会员

积分
111
发表于 2020-9-24 13:35:23 | 显示全部楼层
其实没必要,一个图层就可以了,需要动态刷新的地方emwin会自动进行裁剪,并不是每次都全屏刷新
回复

使用道具 举报

15

主题

73

回帖

118

积分

初级会员

积分
118
 楼主| 发表于 2020-9-24 15:40:33 | 显示全部楼层
本来是用定时器来刷新界面的,因为有仪表盘,所以定时器设置得比较小(但是小到一定程度刷新速度并没有快)。
然后刷图片与不刷图片相比,看到指针明显跑慢了很多。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2020-9-25 00:16:12 | 显示全部楼层
看下是不是这个问题

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法
https://forum.anfulai.cn/forum.p ... 8879&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

15

主题

73

回帖

118

积分

初级会员

积分
118
 楼主| 发表于 2020-9-25 09:59:58 | 显示全部楼层
eric2013 发表于 2020-9-25 00:16
看下是不是这个问题

重要说明,使用存储设备绘制透明图片,透明部分都是黑色背景解决办法

谢谢汉哥回复,我的暂时没有遇到这个问题。本来是觉得刷频慢,所以想将静态和动态分开就方便一些。现在尝试使用内存设备,遇到一个问题:

                case WM_PAINT:       
                               
                                GUI_MEMDEV_Clear(hMemkj);
                                GUI_MEMDEV_Select(hMemkj);
                                //GUI_MEMDEV_Write(hMembj);
                                GUI_MEMDEV_WriteAt(hMembj, 0, 0);
               
                                extern const unsigned char _acsisebj[14091UL + 1];
                                GUI_JPEG_Draw(_acsisebj, 14091UL + 1, 0, 0);
                                GUI_SetFont(&GUI_Fontsongti24x24);
                                GUI_SetTextMode(GUI_TEXTMODE_TRANS);
                                GUI_DispStringAt(buf, 10,0);       
                                DrawLine(g_scale);
                                DrawText(g_scale);
                                DrawNeedle(g_scale);
                                GUI_DrawBitmap(&bmvol40, 12,190);  
                                GUI_DrawBitmap(&bmtimes64, 0,100);  
                                GUI_DrawBitmap(&bmfire48, 5,30);

                                GUI_MEMDEV_Select(0);
                                GUI_MEMDEV_WriteAt(hMembj, 0, 0);
break;

                case WM_TIMER:
                                g_scale.NeedleCurPos += 3;               
                                WM_InvalidateWindow(hWin);
                                WM_RestartTimer(pMsg->Data.v, 5);


这里是使用了定时器去修改指针值,然后重绘windown窗口,发现屏幕不断闪烁,
其实还有一个问题,虽然我设置了5ms的定时,但是实际上是没有那么快重绘的吧。
老实说,这样子让指针跑的很别扭

感谢回复

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-17 03:52 , Processed in 0.038606 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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