硬汉嵌入式论坛

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

[emWin] iconview控件位图不显示

[复制链接]

25

主题

68

回帖

143

积分

初级会员

积分
143
发表于 2024-10-30 10:48:20 | 显示全部楼层 |阅读模式
emwin直接创建控件iconview,不带透明通道。添加了位图信息,只能显示一个位图图标出来,其他的都不显示
控件iconview大小是320*480,添加的位图图标大小是320*49,想用这个做菜单栏,共有十三个菜单,一页显示八个

并且设置了背景色好像没起作用还是白色的底色

无标题.bmp
/* app 图标描述结构体 */
typedef struct {
        const GUI_BITMAP* pBitmap; /* app 图标 */
        const char* pText; /* app 图标名字 */
}BITMAP_ITEM;
/* ICONVIEW 显示的 APP 图标 */
static const BITMAP_ITEM BitmapItemTab1[] = {
{&bmlanguage_C, ""},
{&bmtime_C, ""},
{&bmunit_C, ""},
{&bmsampling_C, ""},
{&bmmode_C, ""},
{&bmdata_C, ""},
{&bmalarm_C, ""},
{&bmcolour_C, ""},
{&bmbacklight_C, ""},
{&bmdisplay_time_C, ""},
{&bmpower_off_C, ""},
{&bmflow, ""},
{&bminformation_C, ""},
};

void cb_BkWindow(WM_MESSAGE* pMsg)
{
    int Id;
    int NCode;
    static int Iconview0_Sel;

    switch (pMsg->MsgId)
    {
    case WM_PAINT:
        GUI_SetBkColor(GUI_MAKE_COLOR(0x00252525));//灰黑色
        GUI_Clear();
        GUI_DrawBitmap(&bmset_back, 0, 35); /* 绘制背景图片 */
        break;
    case WM_NOTIFY_PARENT:
        Id = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch (Id)
        {
        case ID_ICONVIEW_0: /* ICONVIEW0 控件 */
            switch (NCode) /* 通知代码 */
            {
            case WM_NOTIFICATION_CLICKED:
                break;
            case WM_NOTIFICATION_RELEASED:
                Iconview0_Sel = ICONVIEW_GetSel(pMsg->hWinSrc);
                switch (Iconview0_Sel)
                {
                case 0:
               
                  
                    break;
                case 1:
               
                  
                    break;
                case 2:
            
                  
                    break;
                case 3:
              
                  
                    break;

                }
                break;
            case WM_NOTIFICATION_SEL_CHANGED:
                break;
            }
            break;
        }
        break;
    default:
        WM_DefaultProc(pMsg);
        break;
    }
}


void MainTask()
{
    WM_HWIN IconviewWin;
    int i = 0;
        GUI_Init();
    WM_MULTIBUF_Enable(1);
        IconviewWin=ICONVIEW_CreateEx(0, 35, /* 左上角坐标 */
                320, 440, /* 小工具的水平和垂直尺寸 */
                WM_HBKWIN, /* 父窗口为背景窗口 */
                WM_CF_SHOW,
                ICONVIEW_CF_AUTOSCROLLBAR_V,//屏幕不够显示自动加滚动条
                ID_ICONVIEW_0, /* 小工具 ID */
                319, /* 图标的水平尺寸为 320 */
                49); /* 图标的垂直尺寸为 49 */

    for (i = 0; i < (GUI_COUNTOF(BitmapItemTab1)); i++)
        {
                ICONVIEW_AddBitmapItem(IconviewWin, BitmapItemTab1.pBitmap,
                        BitmapItemTab1.pText);
        }
    //ICONVIEW_SetSel(IconviewWin, -1);// -1默认不选中菜单图标,0选中第一个菜单
        ICONVIEW_SetFont(IconviewWin, &GUI_Font16_ASCII);
        ICONVIEW_SetBkColor(IconviewWin, ICONVIEW_CI_SEL, GUI_MAKE_COLOR(0x0000A5FF));//橙色
        ICONVIEW_SetSpace(IconviewWin, GUI_COORD_X, 0);
    ICONVIEW_SetSpace(IconviewWin, GUI_COORD_Y, 1);
        //ICONVIEW_SetIconAlign(IconviewWin, ICONVIEW_IA_HCENTER | ICONVIEW_IA_VCENTER);

       
    WM_SetCallback(WM_HBKWIN, cb_BkWindow); /* 设置桌面窗口 WM_HBKWIN 的回调函数 */
        while (1)
        {
                GUI_Delay(100);
        }
}


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-30 11:33:45 | 显示全部楼层
你的emWin动态内存多大。

你的ICONVIEW大小是320*480,那么你的动态内存在现有使用的基础上,额外开出320*480*每个像素字节,这么大的空间给emWin使用才可以正常使用ICONVIEW控件
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-30 13:21:56 | 显示全部楼层
eric2013 发表于 2024-10-30 11:33
你的emWin动态内存多大。

你的ICONVIEW大小是320*480,那么你的动态内存在现有使用的基础上,额外开出32 ...

无标题.bmp
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-30 13:28:12 | 显示全部楼层
eric2013 发表于 2024-10-30 11:33
你的emWin动态内存多大。

你的ICONVIEW大小是320*480,那么你的动态内存在现有使用的基础上,额外开出32 ...

分配的内存是够大的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-30 15:12:38 | 显示全部楼层

使用你当前的工程模板,运行下我这个帖子里面的V6-910或者911的智能家居emWin部分的代码试试,这个是个ICONVIEW

【年末福利】F429开发板12期emWin提高篇实战例程发布,含音视频播放器(软解实现),uCOS-III和FreeRTOS两个版本
https://www.armbbs.cn/forum.php?mod=viewthread&tid=23687



回复

使用道具 举报

0

主题

272

回帖

272

积分

高级会员

积分
272
发表于 2024-10-30 15:31:42 | 显示全部楼层
如果时用jlink,启用emwin的debug功能,然后通过emWinSPY查看下资源的使用情况。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-30 15:51:02 | 显示全部楼层
eric2013 发表于 2024-10-30 15:12
使用你当前的工程模板,运行下我这个帖子里面的V6-910或者911的智能家居emWin部分的代码试试,这个是个IC ...


有运行过这个例程是正常的

无标题.bmp
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-30 16:07:30 | 显示全部楼层
regbbs 发表于 2024-10-30 15:31
如果时用jlink,启用emwin的debug功能,然后通过emWinSPY查看下资源的使用情况。

额,一点选择目标设备就卡死。应该也不是内存的问题给的内存够用
回复

使用道具 举报

0

主题

272

回帖

272

积分

高级会员

积分
272
发表于 2024-10-30 22:26:04 | 显示全部楼层
ZYG_GYZ 发表于 2024-10-30 16:07
额,一点选择目标设备就卡死。应该也不是内存的问题给的内存够用

只添加一个图片试试,还有就是用其它图片控件看看怎么样。是图片问题还是其他问题。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-31 08:44:13 | 显示全部楼层
ZYG_GYZ 发表于 2024-10-30 15:51
有运行过这个例程是正常的

测试下我这个,比较好测试,这样我方便排查下你的显示问题。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-31 09:21:10 | 显示全部楼层
regbbs 发表于 2024-10-30 22:26
只添加一个图片试试,还有就是用其它图片控件看看怎么样。是图片问题还是其他问题。

屏幕大小一页能显示八条菜单,给位图信息数组只写八条,在这个范围之内是可以正常显示。
超过八条就只能显示出第一条菜单,滚动条自动会加上,触摸也能拖动滚动条
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-31 10:57:51 | 显示全部楼层
eric2013 发表于 2024-10-31 08:44
测试下我这个,比较好测试,这样我方便排查下你的显示问题。


屏幕是320*480竖屏的,显示不全
43e48d8e7be30436697faeb8c6bb24c.jpg 7208e2e4e2c2b426dce304914fe07bf.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-31 16:05:27 | 显示全部楼层
ZYG_GYZ 发表于 2024-10-31 10:57
屏幕是320*480竖屏的,显示不全

你的主控芯片是不是H7系列,或者代Cache的其他型号,如果是的话,可能是你的MPU/Cache没有配置好

如果不是的话,你的底层绘制图片的底层可能有问题。你再试试不展示ICONVIEW,仅仅展示背景图正常不
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-31 16:52:38 | 显示全部楼层
eric2013 发表于 2024-10-31 16:05
你的主控芯片是不是H7系列,或者代Cache的其他型号,如果是的话,可能是你的MPU/Cache没有配置好

如果 ...

芯片是stm32h743



好像是位图图标大小的问题,我的屏幕是320*480大小,iconview控件大小是320*440在坐标(0,35)创建,给控件里添加的位图图标是320*49的.bmp格式图片转.c。
我换小尺寸图片可以正常显示出来,是不是这个控件添加的位图图标x方向大小不能和控件本身太接近?
现在又有一个问题是这个白色的大背景怎么改变啊?设置了选中图标是绿色的背景,在paint消息那设置了灰黑底色好像没作用
0.bmp 1.png

回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-10-31 18:00:08 | 显示全部楼层
eric2013 发表于 2024-10-31 16:05
你的主控芯片是不是H7系列,或者代Cache的其他型号,如果是的话,可能是你的MPU/Cache没有配置好

如果 ...

    ICONVIEW_CreateEx();
    for (i = 0; i < (GUI_COUNTOF(BitmapItemTab1)); i++){
                ICONVIEW_AddBitmapItem(IconviewWin, BitmapItemTab1.pBitmap,
                        BitmapItemTab1.pText);
        }
佬,这种直接创建方式,有没有办法在指定坐标位置添加位图图标啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-1 09:24:30 | 显示全部楼层

你这个白色的大背景是ICONVIEW里面的吗,如果是ICONWIEW里面的,有API可以设置。

如果是之外的,在其父窗口的WM_PAINT消息里面绘制。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-1 09:25:28 | 显示全部楼层
ZYG_GYZ 发表于 2024-10-31 18:00
ICONVIEW_CreateEx();
    for (i = 0; i < (GUI_COUNTOF(BitmapItemTab1)); i++){
               ...

ICONWIEW不是指定位置绘制的,是在通过几个间距API设置的。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-11-1 09:58:06 | 显示全部楼层
eric2013 发表于 2024-11-1 09:25
ICONWIEW不是指定位置绘制的,是在通过几个间距API设置的。

好的
iconview这个控件是不是没有滑动属性啊,不能通过触摸下滑只能拖滚动条
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-2 10:29:01 | 显示全部楼层
ZYG_GYZ 发表于 2024-11-1 09:58
好的
iconview这个控件是不是没有滑动属性啊,不能通过触摸下滑只能拖滚动条


可以自己做,我这个界面就是使用ICONVIEW + motion组件自己做的

https://www.armbbs.cn/forum.php? ... &extra=page%3D1

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:29 , Processed in 0.360606 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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