步骤:
1. 先创建一个列表菜单框架,
fixed_list_menu My_fixed_list_menu;//声明菜单框架
Memset(&My_fixed_list_menu,0,sizeof(fixed_list_menu));
gui_create_fixed_list_menu(&My_fixed_list_menu,20,MMI_content_y+5,136,MMI_content_height-50);//位置和大小
MMI_current_menu_type=LIST_MENU;
2.创建菜单项,
2.1 设置公共属性
fixed_icontext_menuitem My_fixed_icontext_menuitem_common;//菜单项公共属性
memset(&My_fixed_icontext_menuitem_common,0,sizeof(fixed_icontext_menuitem));
gui_create_fixed_icontext_menuitem(&My_fixed_icontext_menuitem_common,200,40);//设置宽高
gui_fixed_icontext_menuitem_set_text_position(&My_fixed_icontext_menuitem_common,24,0);//设置文本偏移位置
My_fixed_icontext_menuitem_common.flags |=UI_MENUITEM_DISALE_BACKGROUND;
2.2设置菜单项的单项属性
#define nitems (4)//菜单项的数目
fixed_icontext_menuitem_type My_fixed_list_menuitem[nitems];//icontext型的菜单项
void *My_fixed_menuitem_pointers[nitems];//指向菜单项列表的索引列表
memset(&My_fixed_list_menuitems,0,sizeof(fixed_list_icontext_menuitem)*nitems);
for(i=0;i<nitems;i++)
{
My_fixed_list_menuitems[i].item_text=(UI_string_type)GetString(STR_MMI_MYAPP+i);//菜单项文本
My_fixed_list_menuitems[i].item_icon=(PU8)GetImage(IMG_GLOBAL_L1+i);//菜单项图标
My_fixed_list_menuitems[i].flags=(UI_MENUITEM_CENTER_TEXT_Y|UI_MNEUITEM_CENTER_ICON_Y);
My_fixed_list_menuitems[i].item_icon_handle=GDI_ERROR_HANDLE;
My_fixed_menuitem_pointers[i]=(void*)&My_fixed_list_menuitems[i];//给索引项赋值(数据地址)
}
3.联合菜单框架和菜单项,
My_fixed_list_menu.items=My_fixed_menuitem_pointers;//菜单项索引列表
My_fixed_list_menu.common_item_data=(void*)&My_fixed_icontext_menuitem_common;//菜单项公共属性
My_fixed_list_menu.n_items=nitems;
gui_set_fixed_list_menu_item_functions(&My_fixed_list_menu,
gui_show_fixed_icontext_menuitem,//显示菜单函数
gui_measure_fixed_icontext_mneuitem,//测量菜单项
gui_highlight_fixed_icontext_menuitem,//高亮函数
gui_remove_highlight_fixed_icontext_menuitem,//失去高亮函数
gui_hide_fixed_icontext_menuitem,//菜单项隐藏函数
resize_fixed_icontext_menuitems,//重设菜单项大小
gui_get_fixed_icontext_list_menuitem_flag//
);
4.显示菜单。
S32 highlight_item=0;//菜单高亮项
My_fixed_list_menu.highlighted_item=-1;
//菜单高亮项索引,此为菜单框架内部属性值,在跳转之前一定要设置为-1
gui_fixed_list_menu_goto_item(&My_fixed_list_menu,highlight_item);
gui_show_fixed_list_menu(&My_fixed_list_menu);
5.进入菜单项功能函数
void mmi_myapp_highlight_handler(S32 item_index)//菜单高亮时
{
mmi_myapp_draw_text(item_index);
switch(item_index)
{
case 0:
SetLeftSoftkeyFunction(mmi_myapp_app1_entry,KEY_EVENT_UP);
break;
case 1:
SetLeftSoftkeyFunction(mmi_myapp_app2_entry,KEY_EVENT_UP);
break;
case 2:
SetLeftSoftkeyFunction(mmi_myapp_app3_entry,KEY_EVENT_UP);
break;
case 3:
SetLeftSoftkeyFunction(mmi_myapp_app4_entry,KEY_EVENT_UP);
break;
case 4:
SetLeftSoftkeyFunction(mmi_myapp_app5_entry,KEY_EVENT_UP);
break;
default:
mmi_myapp_app1_entry();
break;
}
}
///////////////////////////////
在菜单函数中增加左软键功能
SetLeftSoftkeyFunction(mmi_myapp_highlight_handler,KEY_EVENT_UP);
为什么要这样做?
刚进入菜单时,高亮项的处理函数是不执行的,也就是说不进行刷屏的话是获取不到item_index的。