硬汉嵌入式论坛

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

[emWin] iconview触摸有选中效果但不响应wm_notify_parent消息

[复制链接]

25

主题

68

回帖

143

积分

初级会员

积分
143
发表于 2024-12-5 09:17:48 | 显示全部楼层 |阅读模式
iconview触摸点击有选中效果但是怎么不响应wm_notify_parent消息啊,求助

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-5 09:57:07 | 显示全部楼层
方便的话,贴代码看下
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-12-5 13:45:33 | 显示全部楼层
eric2013 发表于 2024-12-5 09:57
方便的话,贴代码看下

这是iconview控件部分

        /* app 图标描述结构体 */
        typedef struct {
                const GUI_BITMAP* pBitmap; /* app 图标 */
                const char* pText; /* app 图标名字 */
        }BITMAP_ITEM;
       
        /* ICONVIEW 显示的图标 */
        static const BITMAP_ITEM BitmapItemTab1[] = {
        {&bmlanguage, "Language"},
        {&bmdate, "Date"},
        {&bmunit, "Unit"},
        {&bmfont, "Color"},

        };
       
        int index_icon=0;
        static const GUI_WIDGET_CREATE_INFO _aDialogCreate_Menu1[] = {
    { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_25, 0, 0, 320, 480, 0, 0x0, 0 },
};

void _cbDialog_Menu1(WM_MESSAGE* pMsg)
{
    WM_HWIN IconviewWin;
    WM_HWIN hItem;
    int i = 0;
    int Id;
    int NCode;
    static int Iconview0_Sel;
        GUI_MEMDEV_Handle hMemBMP;

    switch (pMsg->MsgId)
    {
               
                case MSG_UP:
               
                break;
                case MSG_DOWN:
               
                break;
                case MSG_LEFT:
               
                break;
                case MSG_RIGHT:
               
                break;
                       
                case MSG_ENTER:
               
                break;

                case MSG_ESC:
                GUI_EndDialog(pMsg->hWin, 0);
                CreateFramewin_Main();
                break;

                case WM_TOUCH:
                if(g_GT911.direction==LEFT_GLIDE||g_GT911.direction==RIGHT_GLIDE)
                {
                GUI_EndDialog(pMsg->hWin, 0);
                CreateFramewin_Main();
                }
                break;

    case WM_PAINT:
        GUI_SetBkColor(GUI_MAKE_COLOR(0x00FAFBFF));
        GUI_Clear();
                hMemBMP=LCD_show_pic(0,0,"1:system/home/status_bar.bmp");
                GUI_MEMDEV_WriteAt(hMemBMP,0,0);
        break;
    case WM_INIT_DIALOG:
        //初始化FRAMWIN
        hItem = pMsg->hWin;
        FRAMEWIN_SetTitleVis(hItem, 0);//隐藏标题框
        FRAMEWIN_SetClientColor(hItem, GUI_MAKE_COLOR(0x00FAFBFF));
        FRAMEWIN_SetSkinClassic(hItem);        //使能皮肤色,必须要有
        FRAMEWIN_SetBorderSize(hItem, 0);        //设置边框尺寸为0

        IconviewWin =  ICONVIEW_CreateEx(0,             /* 相对于父窗口坐标的最左像素 */
            40,             /* 相对于父窗口坐标的最上像素 */
            320,            /* 水平尺寸 */
            440,            /* 垂直尺寸 */
            hItem,      /* 父窗口句柄 */
            WM_CF_SHOW | WM_CF_HASTRANS,/* 窗口创建标志 */
            ICONVIEW_CF_AUTOSCROLLBAR_V,              /* 设置自动滚动条 */
            ID_ICONVIEW_0,  /* 控件ID */
            96,             /* 单个图标的水平尺寸 */
            96);       /* 单个图标的垂直尺寸 */
        ICONVIEW_SetFont(IconviewWin, &GUI_FontMiSansMedium30);
                ICONVIEW_SetTextColor(IconviewWin,ICONVIEW_CI_SEL,GUI_WHITE);
                ICONVIEW_SetTextColor(IconviewWin,ICONVIEW_CI_UNSEL,GUI_BLACK);
        ICONVIEW_SetBkColor(IconviewWin, ICONVIEW_CI_BK, GUI_MAKE_COLOR(0x00FAFBFF));
        ICONVIEW_SetBkColor(IconviewWin, ICONVIEW_CI_SEL, GUI_ORANGE);
        ICONVIEW_SetSpace(IconviewWin, GUI_COORD_X, 100);
        ICONVIEW_SetSpace(IconviewWin, GUI_COORD_Y, 60);
        ICONVIEW_SetIconAlign(IconviewWin, ICONVIEW_IA_HCENTER | ICONVIEW_IA_VCENTER);

                for (i = 0; i < (GUI_COUNTOF(BitmapItemTab1)); i++)
                {
                    ICONVIEW_AddBitmapItem(IconviewWin, BitmapItemTab1.pBitmap,
                        BitmapItemTab1.pText);
                }
               
        WM_SetFocus(IconviewWin);
        ICONVIEW_SetSel(IconviewWin, index_icon);// -1默认不选中菜单图标,0选中第一个菜单
        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_GetReleasedItem(pMsg->hWinSrc);
                //Iconview0_Sel = ICONVIEW_GetSel(pMsg->hWinSrc);
                                index_icon=Iconview0_Sel;
                switch (Iconview0_Sel)
                {
                case 0:
                                        GUI_EndDialog(pMsg->hWin, 0);
                                        CreateFramewin_Language();//语言


                    break;
                case 1:
                                        GUI_EndDialog(pMsg->hWin, 0);
                                        CreateFramewin_DATE2();


                    break;
                case 2:
                                        GUI_EndDialog(pMsg->hWin, 0);
                                        CreateFramewin_Units();


                    break;
                case 3:
                                        GUI_EndDialog(pMsg->hWin, 0);
                                        CreateFramewin_FONT();


                    break;
               
                               

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

WM_HWIN hWin;

WM_HWIN MainTask1(void) {
   

    hWin = GUI_CreateDialogBox(_aDialogCreate_Menu1, GUI_COUNTOF(_aDialogCreate_Menu1), _cbDialog_Menu1, WM_HBKWIN, 0, 0);
        menu_param.page=set_menu_page;
        return hWin;
}
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-12-5 13:46:56 | 显示全部楼层
eric2013 发表于 2024-12-5 09:57
方便的话,贴代码看下

实体按键发送窗口消息选中进入操作都没问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-6 08:57:09 | 显示全部楼层
ZYG_GYZ 发表于 2024-12-5 13:46
实体按键发送窗口消息选中进入操作都没问题

1、这个先改进下
case WM_PAINT:
        GUI_SetBkColor(GUI_MAKE_COLOR(0x00FAFBFF));
        GUI_Clear();
                hMemBMP=LCD_show_pic(0,0,"1:system/home/status_bar.bmp");
                GUI_MEMDEV_WriteAt(hMemBMP,0,0);

调用一次hMemBMP=LCD_show_pic(0,0,"1:system/home/status_bar.bmp");后,WM_PAINT里面仅需调用 GUI_MEMDEV_WriteAt(hMemBMP,0,0);

2、触摸游标展示出来,看看是不是卡了,或者其他什么问题。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-12-6 09:56:00 | 显示全部楼层
eric2013 发表于 2024-12-6 08:57
1、这个先改进下
case WM_PAINT:
        GUI_SetBkColor(GUI_MAKE_COLOR(0x00FAFBFF));

1.刷图片那在多个界面刷不同的图片,是初始化后把所有图片全加载到内存设备中,后面用的时候仅需调用 GUI_MEMDEV_WriteAt(hMemBMP,0,0);吗?不同界面的同一坐标刷不同的图片咋区分
我现在是在每个界面的回调函数处定义了GUI_MEMDEV_Handle hMemBMP;
WM_PAINT里每次调用hMemBMP=LCD_show_pic(0,0,"path");
                          GUI_MEMDEV_WriteAt(hMemBMP,X,Y);

2.触摸游标是好的点击游标跟着动
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-7 09:09:36 | 显示全部楼层
ZYG_GYZ 发表于 2024-12-6 09:56
1.刷图片那在多个界面刷不同的图片,是初始化后把所有图片全加载到内存设备中,后面用的时候仅需调用 GUI ...

提前全部加载好是推荐的,否则绘制太慢了。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-12-7 10:06:43 | 显示全部楼层
eric2013 发表于 2024-12-7 09:09
提前全部加载好是推荐的,否则绘制太慢了。

好的
触摸不响应消息怎么搞啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-8 09:08:45 | 显示全部楼层
ZYG_GYZ 发表于 2024-12-7 10:06
好的
触摸不响应消息怎么搞啊

触摸不响应这个,不知道你这个怎么回事。
回复

使用道具 举报

25

主题

68

回帖

143

积分

初级会员

积分
143
 楼主| 发表于 2024-12-12 09:28:56 | 显示全部楼层
  IconviewWin =  ICONVIEW_CreateEx(0,             /* 相对于父窗口坐标的最左像素 */
            40,             /* 相对于父窗口坐标的最上像素 */
            320,            /* 水平尺寸 */
            440,            /* 垂直尺寸 */
            WM_GetClientWindow(pMsg->hWin),      /* 父窗口句柄 */
            WM_CF_SHOW | WM_CF_HASTRANS,/* 窗口创建标志 */
            ICONVIEW_CF_AUTOSCROLLBAR_V,              /* 设置自动滚动条 */
            ID_ICONVIEW_0,  /* 控件ID */
            96,             /* 单个图标的水平尺寸 */
            96);       /* 单个图标的垂直尺寸 */
已解决,父窗口的句柄给客户端的句柄
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:41 , Processed in 0.330320 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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