10A 的GROUP和CUI使用
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,
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;
// 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创建中所注册
10A 的GROUP和CUI使用相关推荐
- 【AI 顶会】NIPS2019接收论文完整列表
NeurIPS2019 NeurIPS 2019的论文结果已经出炉, 包括了36篇oral和164篇spotlights共1428篇论文.可以看到论文的主题还是以深度学习.神经网络.图.优化.通用性. ...
- ICDE‘22推荐系统论文之Research篇
2022推荐系统论文梳理系列 推荐系统相关顶会整理 AAAI'22推荐系统论文梳理 IJCAI'22 推荐系统论文梳理 ICML/ICLR'22 推荐系统论文梳理 WWW'22 推荐系统论文之序列推荐 ...
- MTK 10A 消息机制
1 MTK 10A 帮助文档 一. 10A MMI 主要新特征 1. 新Event 机制 API: #define MMI_FRM_SEND_EVENT(_evt, _proc, _user_data ...
- AttributeError: ‘tuple‘ object has no attribute ‘group‘
我的报错内容如下: 打印的地方 具体代码呢,我写了一个demo 如下 import recontent = "abcabcabc" rex = re.search("c& ...
- AttributeError: ‘NoneType‘ object has no attribute ‘group‘
这个错误是python 使用match 匹配的时候没有匹配到内容, 仍然使用了 group 这个时候报错了 所以处理方法就是检查下想要匹配的内容是否有写错的地方, 例如下面的代码运行就会报错 str_ ...
- group by 分组后 返回的是一个同属性的集合
group by 分组后 返回的是一个同属性的集合 我们可以遍历该集合 转载于:https://www.cnblogs.com/classmethond/p/10164326.html
- 【转】每天一个linux命令(31): /etc/group文件详解
原文网址:http://www.cnblogs.com/peida/archive/2012/12/05/2802419.html Linux /etc/group文件与/etc/passwd和/et ...
- oracle, group by, having, where
选择列表中如果包含有列.表达式时,这个列.表达式必须包含在Group By子句中.另外,如果采用了表达式的话,则数据库管理员即使在选择列表中采用了别名,但是在Group By子句中仍然必须采用表达式的 ...
- java正则 group_Java正则表达式,分组 group()、groupCount()
示例: import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
最新文章
- 基于Opencv的图像单应性转换实战
- 【学习笔记】树的计数,prufer(Prüfer)编码,Cayley公式及相应例题
- Java传统的io和nio区别_Java中IO和NIO的本质和区别
- OSPF 形成邻居 关系的条件
- javaweb认识在web应用中重要的轮询机制(ajax)
- checkInterruptWhileWaiting
- MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了
- python语法与java语法的区别_Python语言与java语法的异同之处
- 课程设计方案模板MySQL_MYSQL数据库课程设计.doc
- FreeCAD源码分析:Assembly3模块
- CAN总线与CANOPEN协议
- 将word文档锁定其他用户不可编辑
- 企业工商信息数据接口说明
- Linux系统优化篇
- 南卫理公会大学 计算机排名,南卫理公会大学全球排名及其优秀校友
- linux系统编程3—文件存储函数
- android app 唤醒屏幕
- App渠道推广统计:安卓渠道分析和渠道效果统计方法
- Stack的概念和算法应用
- C语言程序设计-简易文本编辑器