硬汉嵌入式论坛

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

[emWin] emwin从一个界面按键跳转到另一个菜单显示界面卡顿问题

[复制链接]

8

主题

41

回帖

65

积分

初级会员

积分
65
发表于 2022-6-1 22:39:29 | 显示全部楼层 |阅读模式
如附件显示的那样,从选择菜单按钮按键进入监视菜单,会有卡顿,用的是F429 ,有优化的控件与处理方式吗?求指导。
bbb68f16485ef3018dffa7dce3fc2827.mp4 (3.5 MB, 下载次数: 7)


/*资源表如下*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
  {WINDOW_CreateIndirect,  "Window",               ID_WINDOW_SUB_SETTINGS_MENU, 0, 0, 800, 480, 0, 0x0, 0 },
  {IMAGE_CreateIndirect,   "Image_param_box",      ID_IMAGE_SUB_SETTINGS_MENU_PARAM_BOX, 530, 10, 250, 250, 0, 0, 0 },
  {IMAGE_CreateIndirect,   "Image_menu_title_1",   ID_IMAGE_SUB_SETTINGS_MENU_TITLE_1, 10, 10, 250, 41, 0, 0, 0 },
  {IMAGE_CreateIndirect,   "Image_menu_title_2",   ID_IMAGE_SUB_SETTINGS_MENU_TITLE_2, 270, 10, 250, 41, 0, 0, 0 },
  {LISTBOX_CreateIndirect, "Listbox1",             ID_LISTBOX_SUB_SETTINGS_MENU_1, 10 - 1, 51, 250 + 2, 432, 0, 0x0, 0 },
  {LISTBOX_CreateIndirect, "Listbox2",             ID_LISTBOX_SUB_SETTINGS_MENU_2, 270 - 1, 51, 250 + 2, 432, 0, 0x0, 0 },
  {TEXT_CreateIndirect,    "text_menu_1_title",    ID_TEXT_SUB_SETTINGS_MENU_TITLE_1, 10, 10, 250, 41, 0, 0x0, 0 },
  {TEXT_CreateIndirect,    "text_menu_2_title",    ID_TEXT_SUB_SETTINGS_MENU_TITLE_2, 270, 10, 250, 41, 0, 0x0, 0 },
  {TEXT_CreateIndirect,    "text_menu_3_title",    ID_TEXT_SUB_SETTINGS_MENU_TITLE_3, 530, 10, 250, 41, 0, 0x0, 0 },
  //RW-Value
  {TEXT_CreateIndirect,    "Text_Tag_RW_Value",    ID_TEXT_SUB_SETTINGS_MENU_TAG_RW_VALUE,   550, 60, 218, 30, 0, 0x64, 0},
  {EDIT_CreateIndirect,    "Edit_RW_Value",        ID_EDIT_SUB_SETTINGS_MENU_RW_VALUE,     555, 131, 197, 41, 0, 0, 0 },
  {TEXT_CreateIndirect,    "Text_RW_Value_Min",    ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_MIN, 555, 93, 55, 20, 0, 0x64, 0 },
  {TEXT_CreateIndirect,    "Text_RW_Value_Max",    ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_MAX, 630, 93, 78, 20, 0, 0x64, 0 },
  {TEXT_CreateIndirect,    "Text_RW_Value_Unit",   ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_UNIT, 715, 86, 58, 28, 0, 0x64, 0 },
  //RO-Value
  {TEXT_CreateIndirect,    "Text_RO_Value",        ID_TEXT_SUB_SETTINGS_MENU_RO_VALUE, 529, 117, 249, 41, 0, 0x64, 0 },
  //Bool
  {RADIO_CreateIndirect,   "Radio_Bool",           ID_RADIO_SUB_SETTINGS_MENU_BOOL, 540, 82, 138, 80, 0, 0x1e02, 2 },
  //Enum
  {DROPDOWN_CreateIndirect,"Dropdown_Enum",        ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM, 550, 72, 206, 29, 0, 0x0, 0 },
  //Listview
  {LISTVIEW_CreateIndirect,"Listview",             ID_LISTVIEW_SUB_SETTINGS_MENU, 274, 10, 516, 470, 0, 0x0, 0 },
};



回调函数如下:

static void _cbDialog(WM_MESSAGE * pMsg)
{
emwin_icon_t *pemwin_icon = &emwin_icon;
                sub_settings_menu_info_t  *psub_settings_menu_info = &sub_settings_menu_info;
          
                WM_HWIN hItem;
                int     NCode;
                int     Id;
                int     data;
                uint16_t language = get_parameter_value(METER_PARAMETER_ADDRESS_LANGUAGE);
               
                emwin_feed_iwdg();
               
                switch (pMsg->MsgId)
                {
                        case WM_INIT_DIALOG:
                        {
                                hItem = pMsg->hWin;
                                GUI_SelectLayer(1);
                                WINDOW_SetBkColor(hItem, GUI_BLACK);
                                GUI_Clear();
                                // Initialization of 'Image_msg_box'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_SUB_SETTINGS_MENU_PARAM_BOX);
                                IMAGE_SetDTA(hItem, pemwin_icon->settings_menu_parameter_box.buffer, pemwin_icon->settings_menu_parameter_box.size);
                               
                                // Initialization of 'Image_menu_title_1'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_SUB_SETTINGS_MENU_TITLE_1);
                                IMAGE_SetDTA(hItem, pemwin_icon->settings_menu_title.buffer, pemwin_icon->settings_menu_title.size);
                               
                                // Initialization of 'Image_menu_title_2'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_SUB_SETTINGS_MENU_TITLE_2);
                                IMAGE_SetDTA(hItem, pemwin_icon->settings_menu_title.buffer, pemwin_icon->settings_menu_title.size);
                               
                                //Listbox1      
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_SUB_SETTINGS_MENU_1);
                                LISTBOX_SetBkColor(hItem, LISTBOX_CI_UNSEL ,SETTING_MENU_BACK_COLOR);
                                LISTBOX_SetTextColor(hItem, LISTBOX_CI_UNSEL ,GUI_WHITE);
                                LISTBOX_SetBkColor(hItem, LISTBOX_CI_SELFOCUS ,LIST_BOX_SELECT_BACK_COLOR);
                                LISTBOX_SetTextColor(hItem, LISTBOX_CI_SELFOCUS ,GUI_WHITE);
                                LISTBOX_SetTextAlign(hItem, GUI_TA_LEFT|GUI_TA_VCENTER);
                                LISTBOX_SetItemSpacing(hItem, 9);
                                LISTBOX_EnableWrapMode(hItem, 1);
                                LISTBOX_SetFont(hItem, &font_sif_lib_28);

                                //Listbox2
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_SUB_SETTINGS_MENU_2);
                                LISTBOX_SetBkColor(hItem, LISTBOX_CI_UNSEL ,SETTING_MENU_BACK_COLOR);
                                LISTBOX_SetTextColor(hItem, LISTBOX_CI_UNSEL ,GUI_WHITE);
                                LISTBOX_SetBkColor(hItem, LISTBOX_CI_SELFOCUS ,LIST_BOX_SELECT_BACK_COLOR);
                                LISTBOX_SetTextColor(hItem, LISTBOX_CI_SELFOCUS ,GUI_WHITE);
                                LISTBOX_SetTextAlign(hItem, GUI_TA_LEFT|GUI_TA_VCENTER);
                                LISTBOX_SetItemSpacing(hItem, 9);
                                LISTBOX_EnableWrapMode(hItem, 1);
                                LISTBOX_SetFont(hItem, &font_sif_lib_28);
                               
                                // Initialization of 'Text_Tag_RW'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_TAG_RW_VALUE);
                                TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
                                TEXT_SetFont(hItem, &font_sif_lib_28);
                                TEXT_SetTextColor(hItem, GUI_GRAY);
                                TEXT_SetText(hItem, sttings_menu_rw_tag[language]);
                               
                                // Initialization of 'EDIT_RW_Value'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_SUB_SETTINGS_MENU_RW_VALUE);
                                EDIT_SetText(hItem, "0");
                                EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                EDIT_SetFont(hItem, GUI_FONT_32_1);
        //            EDIT_EnableBlink(hItem, 300, 1);
                               
                                // Initialization of 'Min'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_MIN);
                                TEXT_SetText(hItem, "0");
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetFont(hItem, GUI_FONT_20_1);
                                TEXT_SetTextColor(hItem, GUI_GRAY);
                               
                                // Initialization of 'Max'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_MAX);
                                TEXT_SetFont(hItem, GUI_FONT_20_1);
                                TEXT_SetText(hItem, "100");
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetTextColor(hItem, GUI_GRAY);

                                // Initialization of 'Unit'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_RW_VALUE_UNIT);
                                TEXT_SetFont(hItem, &font_sif_lib_28);//GUI_FONT_20_1);
                                TEXT_SetText(hItem, "%");
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetTextColor(hItem, GUI_GRAY);
                               
                                // Initialization of 'menu_title_1'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_TITLE_1);
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetFont(hItem, &font_sif_lib_28);
                                TEXT_SetTextColor(hItem, GUI_WHITE);

                                // Initialization of 'menu_title_2'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_TITLE_2);
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetFont(hItem, &font_sif_lib_28);
                                TEXT_SetTextColor(hItem, GUI_WHITE);

                                // Initialization of 'menu_title_3'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_TITLE_3);
                                TEXT_SetFont(hItem, &font_sif_lib_28);
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetTextColor(hItem, GUI_WHITE);
                               
                                //Initialization of "TEXT_RO_Value"
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SUB_SETTINGS_MENU_RO_VALUE);
                                TEXT_SetTextColor(hItem, GUI_GRAY);
                                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                                TEXT_SetFont(hItem, GUI_FONT_24_1);
               
                                // Initialization of 'Dropdown_Enum'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM);
                                DROPDOWN_SetListHeight(hItem, 150);
                                DROPDOWN_SetFont(hItem, &font_sif_lib_28);
                                DROPDOWN_SetAutoScroll(hItem, 1);
                               
                                DROPDOWN_SetBkColor(hItem, DROPDOWN_CI_UNSEL ,GUI_MAKE_COLOR(0x00623700));//0x00804000));
                                DROPDOWN_SetBkColor(hItem, DROPDOWN_CI_SELFOCUS ,LIST_BOX_SELECT_BACK_COLOR);
                                DROPDOWN_SetColor(hItem, DROPDOWN_CI_UNSEL ,GUI_WHITE);
                                DROPDOWN_SetColor(hItem, DROPDOWN_CI_SEL ,GUI_WHITE);
                                DROPDOWN_SetColor(hItem, DROPDOWN_CI_SELFOCUS ,GUI_WHITE);

                                // Initialization of 'Radio_Bool'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_SUB_SETTINGS_MENU_BOOL);
                                RADIO_SetTextColor(hItem, GUI_WHITE);
                                RADIO_SetFocusColor(hItem, LIST_BOX_SELECT_BACK_COLOR);
                                RADIO_SetFont(hItem, &font_sif_lib_28);
                               
                                // Initialization of 'Listview'
                                hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_SUB_SETTINGS_MENU);
                                HEADER_SetFont(LISTVIEW_GetHeader(hItem), &font_sif_lib_28);
                                LISTVIEW_SetHeaderHeight(hItem, 32);
                                LISTVIEW_SetRowHeight(hItem, 32);
                                LISTVIEW_SetFont(hItem, &font_sif_lib_28);
                                LISTVIEW_SetGridVis(hItem, 1);
                               
                                LISTVIEW_SetBkColor(hItem, LISTVIEW_CI_UNSEL, SETTING_MENU_BACK_COLOR);
                                LISTVIEW_SetTextColor(hItem, LISTVIEW_CI_UNSEL, GUI_GRAY);
                                LISTVIEW_SetBkColor(hItem, LISTVIEW_CI_SEL, SETTING_MENU_BACK_COLOR);
                                LISTVIEW_SetTextColor(hItem, LISTVIEW_CI_SEL, GUI_GRAY);
                                LISTVIEW_SetBkColor(hItem, LISTVIEW_CI_SELFOCUS, LIST_BOX_SELECT_BACK_COLOR);
                                LISTVIEW_SetTextColor(hItem, LISTVIEW_CI_SELFOCUS, GUI_WHITE);
                               
                               
                                hide_all_widget(pMsg);
                                init_listbox_data(pMsg);
                                break;
                        }
        //        case WM_PAINT:
        //        {
        //            GUI_SetBkColor(GUI_MAKE_COLOR(0x00000000));
        //            GUI_Clear();
        //            break;
        //        }
                        case WM_NOTIFY_PARENT:
                        {
                                Id    = WM_GetId(pMsg->hWinSrc);
                                NCode = pMsg->Data.v;
                                switch(Id)
                                {
                                        case ID_LISTBOX_SUB_SETTINGS_MENU_1:
                                        {
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_CLICKED:
                                                                break;
                                                        case WM_NOTIFICATION_RELEASED:
                                                                break;
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                                update_listbox_1_data(pMsg);
                                                                break;
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                                break;
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                                break;
                                                }
                                                break;
                                        }
                                        case ID_LISTBOX_SUB_SETTINGS_MENU_2:
                                        {
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_CLICKED:
                                                                break;
                                                        case WM_NOTIFICATION_RELEASED:
                                                                break;
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                                update_listbox_2_data(pMsg);
                                                                break;
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                                break;
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                                break;
                                                }
                                                break;
                                        }
                                        case ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM://Enum
                                        {
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM);
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                        {
                                                                DROPDOWN_SetSelExp(hItem, DROPDOWN_GetSel(hItem));
                                                                break;
                                                        }
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                        {
                                                                DROPDOWN_Expand(hItem);
                                                                psub_settings_menu_info->focus_id = ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM;
                                                                break;
                                                        }
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                        {
        //                            if(psub_settings_menu_info->focus_id == ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM)  // TBD ?
        //                            {
        //                               DROPDOWN_Collapse(hItem);
        //                            }
                                                                psub_settings_menu_info->focus_id = 0;
                                                                break;
                                                        }
                                                }
                                                break;
                                        }
                                        case ID_RADIO_SUB_SETTINGS_MENU_BOOL://Bool
                                        {
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_SUB_SETTINGS_MENU_BOOL);
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                                break;
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                                psub_settings_menu_info->focus_id = ID_RADIO_SUB_SETTINGS_MENU_BOOL;
                                                                break;
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                                psub_settings_menu_info->focus_id = 0;
                                                                break;
                                                }
                                                break;
                                        }
                                        case ID_EDIT_SUB_SETTINGS_MENU_RW_VALUE://RW
                                        {
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_SUB_SETTINGS_MENU_RW_VALUE);
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_CLICKED:
                                                                break;
                                                        case WM_NOTIFICATION_RELEASED:
                                                                break;
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                                break;
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                                psub_settings_menu_info->focus_id = ID_EDIT_SUB_SETTINGS_MENU_RW_VALUE;
                                                                break;
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                                psub_settings_menu_info->focus_id = 0;
                                                                break;
                                                }
                                                break;
                                        }
                                        case ID_LISTVIEW_SUB_SETTINGS_MENU://Listview
                                        {
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_SUB_SETTINGS_MENU);
                                                switch(NCode)
                                                {
                                                        case WM_NOTIFICATION_CLICKED:
                                                                break;
                                                        case WM_NOTIFICATION_RELEASED:
                                                                break;
                                                        case WM_NOTIFICATION_SEL_CHANGED:
                                                                break;
                                                        case WM_NOTIFICATION_GOT_FOCUS:
                                                                break;
                                                        case WM_NOTIFICATION_LOST_FOCUS:
                                                                break;
                                                }
                                                break;
                                        }
                                       
                                }
                                break;
                        }
                        case WM_TIMER:
                        {
                                timer_update_data(pMsg);
                                WM_RestartTimer(pMsg->Data.v, 500);
                                break;
                        }
                        case WM_DELETE:
                        {
                                create_main_settings_menu();
                                break;
                        }
                        case WM_KEY:
                        {
                                data = pMsg->Data.v;
                                switch(data)
                                {
                                        case GUI_KEY_UP:
                                        {
                                                break;
                                        }
                                        case GUI_KEY_DOWN:
                                        {
                                                break;
                                        }
                                        case GUI_KEY_BACKTAB:
                                        {
                                                if(psub_settings_menu_info->focus_id == ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM) // TBD ?
                                                {
                                                        DROPDOWN_Collapse(hItem);
                                                }
                                                psub_settings_menu_info->focus_id = 0;
                                                break;
                                        }
                                        case GUI_KEY_TAB:
                                        {
                                                if(psub_settings_menu_info->focus_id == ID_DROPDOWN_SUB_SETTINGS_MENU_ENUM) // TBD ?
                                                {
                                                        DROPDOWN_Collapse(hItem);
                                                }
                                                psub_settings_menu_info->focus_id = 0;
                                                break;
                                        }
                                        case GUI_KEY_ESCAPE:
                                        {
                                                process_escape_msg(pMsg);
                                                break;
                                        }
                                        case GUI_KEY_ENTER:
                                        {
                                                process_enter_msg(pMsg);
                                                break;
                                        }
                                        default:
                                                break;
                                }
                                break;
                        }
                        default:
                        WM_DefaultProc(pMsg);
                        break;
                }
        }



}



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107140
QQ
发表于 2022-6-2 11:47:54 | 显示全部楼层
这个控件很少,应该速度很快才对,是不是底层驱动没有做优化,还有就是用的三缓冲方式还是存储设备方式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 08:58 , Processed in 0.229076 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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