硬汉嵌入式论坛

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

[emWin] 为什么将文本模式设置为透明模式时直接是重叠显示?

[复制链接]

17

主题

42

回帖

17

积分

初级会员

积分
17
发表于 2017-5-22 18:00:52 | 显示全部楼层 |阅读模式
void DispDayTime(void)
{
    GUI_SetTextMode(GUI_TEXTMODE_TRANS);
    GUI_SetColor(GUI_BLUE);
    GUI_SetFont(&GUI_Font20B_ASCII);
    GUI_DispDecAt(calendar.w_year,227,0,4);
    GUI_DispString("/");
    GUI_DispDec(calendar.w_month,2);
    GUI_DispString("/");
    GUI_DispDec(calendar.w_date,2);

    GUI_DispDecAt(calendar.hour,227,20,2);
    GUI_DispString(":");
    GUI_DispDec(calendar.min,2);
    GUI_DispString(":");
    GUI_DispDec(calendar.sec,2);

    GUI_SetFont(&GUI_FontHZ16);
    switch(calendar.week)
    {
        case 0: GUI_DispString("日");break;
        case 1: GUI_DispString("一");break;
        case 2: GUI_DispString("二");break;
        case 3: GUI_DispString("三");break;
        case 4: GUI_DispString("四");break;
        case 5: GUI_DispString("五");break;
        case 6: GUI_DispString("六");break;
    }

}
我在背景窗口的WM_PAINT消息下显示背景图片和时间,如下:

        case WM_PAINT:
            GUI_Clear();
            GUI_DrawBitmap(&_bmHund, 0, 0);                           //显示背景图片
            DispDayTime();                                                         //显示时间
        break;

当我把文本模式设置为透明模式GUI_TEXTMODE_TRANS时,时间是重叠显示不刷新。
当我不设置透明模式时,时间显示正常,但会有背景色,不是直接在背景图片上显示,达不到我的要求。


请问这是什么原因啊?是哪里的问题造成的?
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2017-5-22 21:37:05 | 显示全部楼层
这个透明模式,只是背景透明的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-23 01:23:11 | 显示全部楼层
透明模式,每次的背景都要清除的。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-23 09:13:18 | 显示全部楼层
什么意思?不懂哦,应该怎么破?
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-23 12:56:00 | 显示全部楼层
     GUI_ClearRect(227,0,320,40);                                  //增加了背景清除
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);

我在文本模式设置为透明模式前增加了背景清除,但我的背景是图片,每一个点的背景色都是不一样的,怎么设置每一点清除的背景色呢?
照我目前的做法,总是清楚为同一种颜色。我想背景色和图片色一致啊。

@eric2013
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-23 14:58:32 | 显示全部楼层

回 quickout02 的帖子

quickout02:        GUI_ClearRect(227,0,320,40);                                &n .. (2017-05-23 12:56) 
简单点用text控件吧,省事些。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-23 18:08:53 | 显示全部楼层
请问有这样的例程么?

我写了个简单的程序在电脑上仿真了下,请帮忙看看是哪里有问题啊。(直接加入C文件仿真就可以了) Text1.rar (1 KB, 下载次数: 58)

第一行应该显示2017/05/23
第二行应该显示17:15:08才对啊。

但实际显示这样:
微信截图_20170523180550.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-24 01:57:59 | 显示全部楼层
用资源列表的形式搞吧,参考这个例子吧,算是有个参照:
里面有个万年历的:
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=23687
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-24 10:45:43 | 显示全部楼层
@eric2013版主大大:我附件里的程序帮忙看了么?到底是什么问题啊?单独显示日期或时间都能正常,就是同时显示就不正常了。

路过的大神们也请帮忙仿真看看,到底问题在哪,谢谢啦! Text1.rar (1 KB, 下载次数: 57)
回复

使用道具 举报

36

主题

142

回帖

250

积分

高级会员

积分
250
发表于 2017-5-24 11:19:42 | 显示全部楼层
你是不是把日期和时间装在一个buf里了,然后时间把日期覆盖了。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-24 11:38:22 | 显示全部楼层
是两个不同的不同的buff

            sprintf(year_buff,"%04d/%02d/%02d",calendar.w_year,calendar.w_month,calendar.w_date);
            sprintf(time_buff,"%02d/%02d/%02d",calendar.hour,calendar.min,calendar.sec);
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-25 01:14:49 | 显示全部楼层

回 quickout02 的帖子

quickout02:是两个不同的不同的buff

            sprintf(year_buff,"%04d/%02d/%02d",calendar.w_year,calendar.w_month,calendar.w_date);
           &n .. (2017-05-24 11:38) 
对,设置一次,显示一次。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-26 10:18:52 | 显示全部楼层
设置一次,显示一次,在电脑上仿真是可以了。

但我下到开发板后怎么就不能显示ICONVIEW图标了呢?我的图标是存在SD卡中的。

我通过反复注释下载发现是字符串生成语句造成的,只要加上这两句就不行了,请问这是咋回事啊?

            sprintf(year_buff,"%04d/%02d/%02d",calendar.w_year,calendar.w_month,calendar.w_date);
            sprintf(time_buff,"%02d/%02d/%02d",calendar.hour,calendar.min,calendar.sec);

@eric2013
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-5-26 13:37:25 | 显示全部楼层
总算搞定了,换了另一种方法,血泪啊。
搞不明白为什么用sprintf不行,我最终用的是itoa和strcat,转化后组合。
硬是把两行代码搞成了几十行代码[s:128] [s:128] [s:128]
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-27 02:14:48 | 显示全部楼层

回 quickout02 的帖子

quickout02:总算搞定了,换了另一种方法,血泪啊。
搞不明白为什么用sprintf不行,我最终用的是itoa和strcat,转化后组合。
硬是把两行代码搞成了几十行代码[s:128] [s:128] [s:128]  (2017-05-26 13:37) 
sprintf就很好用用的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 13:01 , Processed in 0.052591 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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