mt2503 key event routing机制
时间:10-02
整理:3721RD
点击:
[Description]
10A之后,如何使用php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework的key event routing机制
[Solution]
10A之后,在MAUI framework中有多个layers(如:sys、screen、category、wgui、key handler)可以接收key events并对其进行处理,若有希望
在某个层对key events进行处理则可以注册该层的proc函数,如果希望在其之后的层也能够处理到key events则proc函数返回MMI_RET_OK,否则返回
MMI_RET_KEY_HANDLED,MMI Framework已注册好了sys和key handler这两层的proc函数,分别为mmi_sys_key_proc和mmi_key_hdlr_proc,无需再进
行注册。
在mmi_sys_key_proc中会处理一些特殊按键,如End Key的默认操作,实现按End Key返回idle界面等,因此也可以模仿End Key在这个函数
中对某些键做统一的默认处理。在mmi_key_hdlr_proc中会调用使用SetKeyHandler注册的处理函数等。
如下是MMI提供的注册Sys、Screen、Category和WGUI层Proc函数的相关宏:
MMI_SYS_SET_KEY_PROC(key_proc, user_data)
MMI_SCR_SET_KEY_PROC(key_proc,user_data)
MMI_CAT_SET_KEY_PROC(key_proc,user_data)
MMI_WGUI_SET_KEY_PROC(key_proc,user_data)
此外还提供了mmi_frm_set_key_proc来完成对各key event routing layer的注册以及mmi_frm_scrn_set_key_proc来实现对screen层proc函数的设置
。
Example:
利用mmi_frm_scrn_set_key_proc在screen层设置proc函数一般的做法:
void mmi_xxx_screen_entry(void)
{
if(mmi_frm_scrn_enter(GRP_ID_YYY,GRP_ID_XXX,NULL, mi_xxx_screen_entry, MMI_FRM_FULL_SCRN) == MMI_TRUE)
{
//设置screen层的proc函数mmi_app_key_proc
mmi_frm_scrn_set_key_proc(GRP_ID_YYY, SCR_ID_XXX, mmi_app_key_proc);
}
}
//对screen层的proc函数mmi_app_key_proc进行实现
mmi_ret mmi_app_key_proc(mmi_event_struct *evt)
{
mmi_frm_key_evt_struct *key_evt = (mmi_frm_key_evt_struct *)evt;
if (key_evt->evt_id == EVT_ID_ON_KEY)
{
switch(key_evt->key_code)
{
case KEY_UP_ARROW:
...
return MMI_RET_KEY_HANDLED;
}
}
return MMI_RET_OK;
}
10A之后,如何使用php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework的key event routing机制
[Solution]
10A之后,在MAUI framework中有多个layers(如:sys、screen、category、wgui、key handler)可以接收key events并对其进行处理,若有希望
在某个层对key events进行处理则可以注册该层的proc函数,如果希望在其之后的层也能够处理到key events则proc函数返回MMI_RET_OK,否则返回
MMI_RET_KEY_HANDLED,MMI Framework已注册好了sys和key handler这两层的proc函数,分别为mmi_sys_key_proc和mmi_key_hdlr_proc,无需再进
行注册。
在mmi_sys_key_proc中会处理一些特殊按键,如End Key的默认操作,实现按End Key返回idle界面等,因此也可以模仿End Key在这个函数
中对某些键做统一的默认处理。在mmi_key_hdlr_proc中会调用使用SetKeyHandler注册的处理函数等。
如下是MMI提供的注册Sys、Screen、Category和WGUI层Proc函数的相关宏:
MMI_SYS_SET_KEY_PROC(key_proc, user_data)
MMI_SCR_SET_KEY_PROC(key_proc,user_data)
MMI_CAT_SET_KEY_PROC(key_proc,user_data)
MMI_WGUI_SET_KEY_PROC(key_proc,user_data)
此外还提供了mmi_frm_set_key_proc来完成对各key event routing layer的注册以及mmi_frm_scrn_set_key_proc来实现对screen层proc函数的设置
。
Example:
利用mmi_frm_scrn_set_key_proc在screen层设置proc函数一般的做法:
void mmi_xxx_screen_entry(void)
{
if(mmi_frm_scrn_enter(GRP_ID_YYY,GRP_ID_XXX,NULL, mi_xxx_screen_entry, MMI_FRM_FULL_SCRN) == MMI_TRUE)
{
//设置screen层的proc函数mmi_app_key_proc
mmi_frm_scrn_set_key_proc(GRP_ID_YYY, SCR_ID_XXX, mmi_app_key_proc);
}
}
//对screen层的proc函数mmi_app_key_proc进行实现
mmi_ret mmi_app_key_proc(mmi_event_struct *evt)
{
mmi_frm_key_evt_struct *key_evt = (mmi_frm_key_evt_struct *)evt;
if (key_evt->evt_id == EVT_ID_ON_KEY)
{
switch(key_evt->key_code)
{
case KEY_UP_ARROW:
...
return MMI_RET_KEY_HANDLED;
}
}
return MMI_RET_OK;
}
路过!
支持原创