|
楼主 |
发表于 2010-5-5 17:24:11
|
显示全部楼层
MTK的高亮函数,基本都是在类似于下面的函数里被调用的
void PopulateMainMenuRes(void)
{
ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PROFILES_MENUID, highlight_mainmenu_profiles);
ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PHONEBOOK_MENUID, highlight_mainmenu_phonebook);
而这个函数最终是放在开机初始化函数里的调用的,比如InitializeAll,
(我非常不理解这么做,这些完全可以放在按键处理时做,为什么放在开机初始化中,影响开机速度。谁帮我解答这个问题?)
以主菜单的SETTING为例
void highlight_mainmenu_settings(void)
{
//LSK执行EntryScrSettingMenu
//RSK返回上级菜单(父菜单)
MApp_MainMenu_SetSoftKey_Handler(EntryScrSettingMenu, handle_mainmenu_right_softkey_up);
}
进入SETTING屏幕
void EntryScrSettingMenu(void)
{
。。。。。。
/* 7 Register highlight handler to be called in menu screen */
RegisterHighlightHandler(ExecuteCurrHiliteHandler);
。。。。。
}
void RegisterHighlightHandler(void (*f) (S32 item_index))
{
MMI_list_highlight_handler = f;
MMI_matrix_highlight_handler = f;
MMI_circular_3D_highlight_handler = f;
}
把ExecuteCurrHiliteHandler函数赋给三个函数指针
对于不同类型的菜单会有不同的全局变量,通过才这样的全局变量,系统其他部分的代码就可以直接使用该全局变量进行对高亮函数的调用
void ExecuteCurrHiliteHandler(S32 hiliteid)
{
ClearKeyHandler(KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
ExecuteCurrHiliteHandler_Ext(hiliteid);
}
ExecuteCurrHiliteHandler_Ext去找该高亮函数,(名字感觉和功能无法对应,词不达意,不好的编程风格) |
|