10A 的GROUP和CUI使用

 

Group结构图

1、group的定义

定义group ID和定义Screen ID一样

在XXX.res 中定义

<SCREEN id="GRP_ID_MYAPP_5"/>//group id

<SCREEN id="GRP_ID_MYAPP_6"/>//group id

<SCREEN id="SCR_ID_MYAPP_5"/>//screen id

                  <SCREEN id="SCR_ID_MYAPP_6"/>//screen id

通过编译资源,系统会自动生成mmi_rp_app_XXX_def.h文件

在mmi_rp_app_XXX_def.h中

我们可以看到如下的定义,这就是我们的group id了,可以看出去group id和screen id 其实是一个东西,只是用法不同而已。

typedef enum

{

    GRP_ID_MYAPP_HEAD = 60382 + 1, /* BASE_ID + 1 */

    GRP_ID_MYAPP_5,

    GRP_ID_MYAPP_6,

    SCR_ID_MYAPP_HEAD,

    SCR_ID_MYAPP_5,

    SCR_ID_MYAPP_6,

    MMI_RP_APP_MYAPP_SCR_MAX

}mmi_rp_app_myapp_scr_enum;

 

       2、group使用

void entry_myapp_screen(void)

{

         MMI_ID parent_id;//定义上级group id

         parent_id=mmi_frm_group_get_active_id();//得到当前激活group id

//将新建的group GRP_ID_MYAPP_HEAD插入到parent_id中

         mmi_frm_group_create(parent_id,

                          GRP_ID_MYAPP_HEAD,

                          mmi_myapp_proc, // mmi_myapp_proc 相当于group的callback函数,

                          NULL);

// mmi_frm_group_enter为进入group函数,具体做了什么以后分析

         mmi_frm_group_enter(GRP_ID_MYAPP_HEAD, MMI_FRM_NODE_SMART_CLOSE_FLAG);

// entry_myapp_show_screen()和group_entry_myapp_show_screen()用于显示菜单的函数

#if 0

         entry_myapp_show_screen();

#else

group_entry_myapp_show_screen();

#endif

}

//所有与group GRP_ID_MYAPP_HEAD相关的操作都会调用mmi_myapp_proc函数,其中

//EVT_ID_CUI_MENU_ITEM_SELECT情况是为CUI提供菜单相应函数

static mmi_ret mmi_myapp_proc(mmi_event_struct *evt)

{

    switch (evt->evt_id)

    {

        case EVT_ID_GROUP_FIRST_ENTRY:myapp_black();break;//第一次进入group时调用

        case EVT_ID_GROUP_INACTIVE:myapp_black(); break;//已经激活时调用

        case EVT_ID_GROUP_ACTIVE:myapp_black();break;//激活时调用

        case EVT_ID_GROUP_GOBACK:myapp_black();break;//调gobackhistory时调用

        case EVT_ID_GROUP_DELETE_REQ:myapp_black(); break;   

        case EVT_ID_GROUP_DEINIT:myapp_black();break;//注销时调用

        case EVT_ID_GROUP_FOCUSED:myapp_black();break;

                      case EVT_ID_CUI_MENU_ITEM_SELECT://为CUI提供菜单高亮相应函数

                            if (menu_evt->highlighted_menu_id == MENU_ID_MYAPP_1)

            {

               myapp_menu1_hight_hdr();

            }

            else if (menu_evt->highlighted_menu_id == MENU_ID_MYAPP_2)

            {

               myapp_menu2_hight_hdr();

            }

else if (menu_evt->highlighted_menu_id == MENU_ID_MYAPP_3)

                              {

                                     myapp_menu3_hight_hdr();

                            }

                                      break;

        default: break;

    }

    return MMI_RET_OK;

}

//使用group就是为了显示窗体的,下面就是显示部分

void group_entry_myapp_show_screen(void)

{

#if 1

                  U8 *guiBuffer;

    U16 nStrItemList[10];

    U16 nNumofItem = 0;

 

    /*----------------------------------------------------------------*/

    /* Code Body                                                      */

    /*----------------------------------------------------------------*/

// mmi_frm_scrn_enter是进入group操作和EntryNewScreen功能差不多

    if (!mmi_frm_scrn_enter(

            GRP_ID_MYAPP_HEAD,//group id

            SCR_ID_MYAPP_HEAD,//screnn id

            NULL,

            group_entry_myapp_show_screen,//入口函数

            MMI_FRM_FULL_SCRN))//全屏显示

    {

        return;

    }

         guiBuffer = mmi_frm_scrn_get_active_gui_buf();//得到屏幕buf

//下面的不是10A的特性就不多说了

         RegisterHighlightHandler(ExecuteCurrHiliteHandler);

         nNumofItem = GetNumOfChild_Ext(MENU_ID_MYAPP_HEAD);

         GetSequenceStringIds_Ext(MENU_ID_MYAPP_HEAD, nStrItemList);

         SetParentHandler(MENU_ID_MYAPP_HEAD);

         ShowCategory15Screen(

        STR_GLOBAL_OPTIONS,

        NULL,

        STR_GLOBAL_OK,

        IMG_GLOBAL_OK,

        STR_GLOBAL_BACK,

        IMG_GLOBAL_BACK,

        nNumofItem,

        nStrItemList,

        (U16*)gIndexIconsImageList,

        LIST_MENU,

        0,

        guiBuffer);

        ClearKeyEvents();

    SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);

    SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);

#endif

}

3、cui的使用

Cui的用途就是为了方便用户显示菜单,实例如下:

Void entry_myapp_show_screen (void)

{

        mmi_id menu_id;//定义id

    menu_id = cui_menu_create(//创建cui

                GRP_ID_MYAPP_HEAD,//group id

                CUI_MENU_SRC_TYPE_RESOURCE,

                CUI_MENU_TYPE_FROM_RESOURCE,

                MENU_ID_MYAPP_HEAD,// 父菜单ID

                MMI_FALSE,

                (void*) (U32) MENU_ID_MYAPP_HEAD);

    cui_menu_set_default_title(//设置标题及图片

        menu_id,

        (UI_string_type) GetString(STR_GLOBAL_ABORT),

        (UI_image_type) GetImage(IMG_GLOBAL_ACTIVATED));

    cui_menu_run(menu_id);//执行cui

}

entry_myapp_show_screen的整个效果和group_entry_myapp_show_screen一样,我们可以看出entry_myapp_show_screen确实比group_entry_myapp_show_screen简洁了不少这个也是CUI的意义所在,但是同时CUI所显示菜单的高亮相应事件无法通过在.res文件中注册(例如:<MENUITEM

id="MENU_ID_MYAPP_3" str="STR_ID_MYAPP_MENU_3"

highlight="mmi_myapp_menu_3_hdr"/>),CUI所显示的菜单的高亮相应事件要定义在mmi_myapp_proc这种Group创建中所注册的函数中(例如: case EVT_ID_CUI_MENU_ITEM_SELECT: ……..;break;)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值