1 应用GROUP
MMI_ID mmi_frm_group_create (MMI_ID parent_id, MMI_ID group_id, mmi_proc_func proc, void *user_data)
MMI_ID mmi_frm_group_enter (MMI_ID group_id, mmi_group_enter_flag flag)
例如:
mmi_frm_group_create(GRP_ID_ROOT, APP_BARCODEREADER, mmi_barcodereader_cui_event_proc, NULL);
mmi_frm_group_enter(APP_BARCODEREADER, MMI_FRM_NODE_SMART_CLOSE_FLAG);
其中函数proc 会对各种事件作出处理,常见事件有
enum
{
EVT_ID_GROUP_FIRST_ENTRY,
EVT_ID_GROUP_ACTIVE,
EVT_ID_GROUP_INACTIVE,
EVT_ID_GROUP_DEINIT,
EVT_ID_SCRN_DELETE_REQ,
EVT_ID_SCRN_DEINIT
};
事件的结构为
#define MMI_EVT_GROUP_PARAM_HEADER \
MMI_EVT_PARAM_HEADER \
mmi_id sender_id;
#define MMI_EVT_PARAM_HEADER \
U16 evt_id; \
U16 size; \
void *user_data;
我们还可以为事件的结构加以延伸,加上我们自己的需要的事件的特性,例如:
typedef struct
{
MMI_EVT_GROUP_PARAM_HEADER
S32 result; /* save contact result: pls check PhbSrvGprot.h for error detail */
U16 store_index; /* saved contact's store index */
U8 field_type; /* last highlight field type */
} cui_phb_save_contact_result_struct;
具体使用举例如下:
cui_phb_save_contact_result_struct evt;
evt.evt_id = EVT_ID_PHB_SAVE_CONTACT;
evt.size = sizeof(cui_phb_save_contact_result_struct);
evt.user_data = NULL;
evt.sender_id = g_mmi_phb_save_contact_p->sg_id;
evt.result = result;
evt.store_index = store_index;
evt.field_type = g_mmi_phb_save_contact_p->highlight_type;
每个应用中,可能含有一个或者几个场景,如是要定义每个场景的ID,当有每个场景的事件发生时,执行相应的事件函数。
写到这里,我们可能想知道到底在什么地方,这些事件函数会发生。
mmi_frm_group_enter_ex(),//应用进入,通过注册按键
mmi_frm_group_close_ex(),//应用退出,通过注册按键
scenario_process_post_evt_ex(),//场景改变时
发送事件到proc函数
mmi_frm_scrn_send_to_parent(),//子节点向父节点发送事件,通过定时器回调函数L4CallBackTimer
mmi_frm_group_send_to_parent(),
会执行proc函数,执行相应事件。
几个重要的函数
void StartTimer(U16 timerid, U32 delay, FuncPtr funcPtr)//设置队列性定时器事件,发送定时器事件到事件队列里,MMI_TASK读取事件并执行
SetProtocolEventHandler(func, event);//设置协议事件,,发送协议事件到事件队列里,MMI_TASK读取事件并执行
MMI_FRM_INIT_EVENT(&event, event_id);//初始化事件结构
如果应用中下一个场景与上一个场景无关时,通过函数mmi_ret mmi_frm_scrn_close (MMI_ID parent_id, MMI_ID scrn_id)结束上个屏幕。
进入新屏幕:mmi_frm_create_new_screen()
mmi_imui_send_message
mmi_imc_send_message
mmi_input_box_msg_call_back_inline
mmi_input_box_msg_call_back_inline_text
//单行显示字符,光标,背景
gui_draw_single_line_one_line
gui_draw_single_line_character
gui_handle_single_line_cursor
gui_draw_single_line_highlight
//多行显示字符,光标,背景
gui_draw_multi_line_one_line
gui_draw_multi_line_single_character