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;)。

你可能感兴趣的:(10A 的GROUP和CUI使用)