为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Iphone PhoneBook(iphone 电话本 MTK)

2011-06-23 15页 doc 136KB 22阅读

用户头像

is_695590

暂无简介

举报
Iphone PhoneBook(iphone 电话本 MTK)PhoneBook 一、PhoneBook的流程分析 查看MTK文档,PhoneBook主界面的入口函数是mmi_phb_entry_main_menu,因此需要找到这个函数,然后找到PhoneBook主界面的创建处。 1、首先在mmi_phb_entry_main_menu()函数处断下 直接F5进来,来到了第一个函数: MMI_TRACE(MMI_PHB_TRACE_GROUP, TRC_MMI_PHB_ENTRY_MAIN_MENU); 这个函数暂且不管,没有时间,估计是跟踪消息的。 接下来就到了这个函数,看意思是里面的...
Iphone PhoneBook(iphone 电话本 MTK)
PhoneBook 一、PhoneBook的流程分析 查看MTK文档,PhoneBook主界面的入口函数是mmi_phb_entry_main_menu,因此需要找到这个函数,然后找到PhoneBook主界面的创建处。 1、首先在mmi_phb_entry_main_menu()函数处断下 直接F5进来,来到了第一个函数: MMI_TRACE(MMI_PHB_TRACE_GROUP, TRC_MMI_PHB_ENTRY_MAIN_MENU); 这个函数暂且不管,没有时间,估计是跟踪消息的。 接下来就到了这个函数,看意思是里面的界面元素是否准备好,不妨跟踪进去 if (!mmi_phb_check_ready(MMI_TRUE)) { return; } 跟踪进来发现函数描述是“测试电话本是否准备就绪”;其中的主要判断函数是: MTPNP_PFAL_Phb_IsReady() == MTPNP_FALSE 进过看看这个变量的定义: typedef enum { MTPNP_FALSE = 0, MTPNP_TRUE = 1 } MTPNP_BOOL; 下面来进入这个函数来看看 MTPNP_BOOL MTPNP_PFAL_Phb_IsReady(void) { MTPNP_BOOL SlaveEffect; if (MTPNP_PFAL_Is_Card2Absent() || MTPNP_AD_Get_Card2Status() == MTPNP_AD_SIMCARD_INVALID || MTPNP_AD_Get_Card2Status() > MTPNP_AD_SIMCARD_VALID) { SlaveEffect = MTPNP_TRUE; } else { SlaveEffect = MTPNP_AD_ADN_SIM2_Is_LoadFinished(); } if (g_phb_cntx.phb_ready && !g_phb_cntx.processing && SlaveEffect) { return MTPNP_TRUE; } else { return MTPNP_FALSE; } } 都是一些状态的判断,这里就不管了。接着mmi_phb_entry_main_menu函数讲。 中间过了几个函数,不是我们所关心的,下面直接来到函数: mmi_phb_quick_search_list_pre_entry(); 看名字也知道是很重要的,跟进: mmi_phb_entry_quick_search_list(); 这个是主要的函数。跟进来到的第一个函数就是: EntryNewScreen( SCR_ID_PHB_QUICK_SEARCH_LIST, mmi_phb_exit_quick_search_list, mmi_phb_quick_search_list_pre_entry, MMI_FULL_SCREEN); 接着保存屏幕历史机制: guiBuffer = GetCurrGuiBuffer(SCR_ID_PHB_QUICK_SEARCH_LIST); RegisterHighlightHandler(mmi_phb_quick_search_get_index); 这个是注册高亮处理,里面应该是处理函数,通过对mmi_phb_quick_search_get_index函数的断点发现,每次点击菜单子项都会高亮,并在相应事件的时候断下。 注册搜索函数: RegisterCat200SearchFunction(mmi_phb_quick_search_find_entry); 这个函数非常重要,通过我对mmi_phb_quick_search_find_entry下断点,发现,只要输入框中的字符串有变化(包括输入和删除),那么这个函数就被执行,可见这个函数对我有多主要。 void RegisterCat200SearchFunction(S32(*search_function) (U8 *)) { if (search_function) { cat200_search_function = search_function; } } 跟踪到内部发现RegisterCat200SearchFunction函数是对搜索函数做了一次封装,而被封装的函数的命名又是与200有关,这不仅让我汗颜,MTK的言下之意是这种搜索功能只能是电话簿才会用到。而我所做的功能却需要用到这个函数,我不可能去改动,我所能做的就是在一次封装,如RegisterCat201SearchFunction。 接下来设置搜索类型: g_phb_quick_search_enter = MMI_PHB_QUICK_SEARCH_MAIN; 通过查找数据类型发现: typedef enum { MMI_PHB_QUICK_SEARCH_MAIN, MMI_PHB_QUICK_SEARCH_GENERIC, MMI_PHB_QUICK_SEARCH_ENUM_TOTAL } MMI_PHB_QUICK_SEARCH_ENUM; 我不太清楚这两种搜索。不过这两种基本相同,唯一不同的是所使用的变量名不同。 当从“工具箱”菜单进来的时候guiBuffer就是NULL,如果送三级菜单返回到二级菜单那么guiBuffer就不是NULL了,他要实现历史机制。 if (guiBuffer == NULL) { entryCount = mmi_phb_num_of_phb_contact_in_storage(g_phb_cntx.prefer_storage); if (entryCount == 0) { g_phb_cntx.highlight_entry = 0; } else { g_phb_cntx.highlight_entry = 1; } /* Add new contact , so count + 1 */ entryCount++; g_phb_cntx.new_highlight_entry = 0xffff; memset(g_phb_qsearch_input, 0, ENCODING_LENGTH); memset(g_phb_qsearch_bitmask, 0xff, (MAX_PB_ENTRIES + 7) / 8); /* '2' is used only for this screen. */ g_phb_cntx.refresh_list = MMI_PHB_ENTRY_NO_CHANGE; } 获取联系人数目保存在entryCount,跟踪的结果是3,事实就是这样。 在设置菜单的第一项为高亮。添加联系人数目加1,我真搞不懂,他在这个地方加1,只得看后文了。 注册中间按钮: EnableCenterSoftkey(0, IMG_GLOBAL_VIEW_CSK); 接下来到了: wgui_fixed_list_register_get_flags_handler(mmi_phb_quick_search_list_seperate_line); dynamic_list_goto_item_no_redraw(highlighted_item); gui_dynamic_list_menu_goto_item(&MMI_fixed_list_menu, item_index); m->item_get_flag_function(NULL, NULL, m->highlighted_item, &flags, &flags_ext);/gui_get_fixed_icontext_menuitem_flag g_gui_list_get_menuitem_flags(index, &ret_flag, &ret_flag_ext); mmi_phb_quick_search_list_seperate_line 其费了这么大的周折主要是完成UI_MENUITEM_EXT_SHOW_DOWN_SEPARATORLINE这个标志,也不知道这个标志是什么意思,猜:每次只能选中一个菜单项。 wgui_cat200_set_specific_highlight(); 当刷新时,高亮回到第一个菜单。 现在进入一个屏幕模板函数: ShowCategory200Screen( STR_SCR_PBOOK_VIEW_CAPTION, IMG_SCR_PBOOK_CAPTION, STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS, STR_GLOBAL_BACK, IMG_GLOBAL_BACK, entryCount, mmi_phb_quick_search_list_get_item, mmi_phb_quick_search_list_get_hint, g_phb_cntx.highlight_entry, IMG_ID_PHB_QUICK_SEARCH_FIND, (U8*) g_phb_qsearch_input, MMI_PHB_QUICK_SEARCH_INPUT_LENGTH, guiBuffer); 第一个参数:显示“电话簿”字符串的ID; 第二个参数:发现没有找到这张图片,问了唐晋星说:“Iphone”的项目没有用到软左键。 第三个参数:显示”Option”“选项”的字符串ID; 第四个参数:看这个图片也是没有用到,只找到一张空的图片; 第五个参数:显示”back”“返回”的字符串ID; 第六个参数:看这个图片也是没有用到,只找到一张空的图片; 第七个参数:实际菜单数+1; 第八个参数:获取快速搜索项文本列; 第九个参数:获取快速搜索项的列表数; 第十个参数:高亮菜单的入口ID,即菜单项的第几项; 第十一个参数:进过查看原图,发现是搜索输入框最左边的图标; 第十二个参数:这个参数真的还没有搞懂,只知道它是传递到内部函数的,看他传递的是地址,我初步估计他是获取输入框输入的子,因为它被初始化成为ENCODING_LENGTH,它是占用两个字节的; 第十三个参数:快速搜索的做大长度跟踪发现其值是6,其实只能输入5个Unicode,即小于6; 第十四个参数:历史机制。 我们必须得跟进这个函数,显然这个函数是一次函数的调用。F11后进入wgui_categories.c文件,这里有ShowCategory200Screen函数的实现,其实我知道,我要做的是也是在这里实现一个类似的函数。进入这个函数后发现代码也是很熟悉的,其函数体实现如下: dm_data_struct dm_data; S32 input_box_width = 0, list_height = 0, max_entries = 0; U8 h_flag; BOOL application_present; 第一行:定义重绘管理器,用于处理控件集和属性集; 第二行:定义输入框的宽、高; 第三行:定义保存控件属性的标志(Buffer的历史机制)。 第四行:检查是否在字典中(搜索时用)。 锁定当前图层,各个组件绘制签前的任务准备就绪: gdi_layer_lock_frame_buffer(); 添加一些基本的资源: ShowListCategoryScreen_ext( get_string(title), get_image(title_icon), get_string(left_softkey), get_image(left_softkey_icon), get_string(right_softkey), get_image(right_softkey_icon)); 其 内部实现很简单,不用查看。 wgui_singleline_inputbox_LSK_label_icon = get_image(left_softkey_icon); wgui_singleline_inputbox_LSK_label_string = get_string(left_softkey); 上面的图标倒是没有获取到,字符串获取到了。 下面这里很重要,是我需要修改的地方: g_wgui_cat200_resize_and_move_func = wgui_cat200_resize_and_move; g_wgui_cat200_draw_information_bar_func = wgui_inputs_sl_redraw_information_bar; 第一个函数的代码如下: /***************************************************************************** * FUNCTION * wgui_cat200_resize_and_move * DESCRIPTION * This is a callback function when IME send resize and move message * 1.resize list * 2.move singleline inputbox * PARAMETERS * inputbox_y [IN] sinlgeline inputbox y position * RETURNS * void *****************************************************************************/ void wgui_cat200_resize_and_move(S32 inputbox_y) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 menu_h = 0, sl_y = 0; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ /*zhouweicheng modify start@2010-11-18: Because At the bottom of the phone book there is a single-line edit box,and it is unnecessary*/ #ifdef __IPHONE_STYLE__ sl_y = UI_device_height-MMI_virtual_keyboard.height -CAT200_INPUTBOX_H; #else sl_y = inputbox_y - 1; /* border */ #endif menu_h = sl_y - 1 /* border */ - MMI_fixed_list_menu.y; resize_fixed_list(MMI_fixed_list_menu.width, menu_h); gui_dynamic_list_menu_locate_highlighted_item(&MMI_fixed_list_menu); #ifdef __IPHONE_STYLE__ wgui_move_virtual_keyboard(MMI_virtual_keyboard.x,UI_device_height-MMI_virtual_keyboard.height); #endif /*zhouweicheng modify end@2010-11-18*/ wgui_inputs_sl_move(MMI_singleline_inputbox.x, sl_y); } 首先计算在纵方向的位置;然后再重绘菜单;接着显示默认高亮;进一步显示虚拟键盘;最后移动输入框。 第二个函数实现如下: /***************************************************************************** * FUNCTION * wgui_inputs_sl_redraw_information_bar * DESCRIPTION * redrwa input information bar * PARAMETERS * void * RETURNS * void *****************************************************************************/ void wgui_inputs_sl_redraw_information_bar(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 x1 = wgui_inputbox_information_bar_x; S32 y1 = wgui_inputbox_information_bar_y; S32 x2 = wgui_inputbox_information_bar_x + wgui_inputbox_information_bar_width - 1; S32 y2 = wgui_inputbox_information_bar_y + wgui_inputbox_information_bar_height - 1; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ #if(UI_DOUBLE_BUFFER_SUPPORT) gui_lock_double_buffer(); #endif wgui_inputs_input_information_background(x1, y1, x2, y2); wgui_inputs_show_input_mode(mmi_imm_get_curr_input_mode(), NULL); wgui_inputs_sl_redraw_remaining_characters_display(); #if(UI_DOUBLE_BUFFER_SUPPORT) gui_unlock_double_buffer(); gui_BLT_double_buffer(x1, y1, x2, y2); #endif /* (UI_DOUBLE_BUFFER_SUPPORT) */ } 重绘单行输入框信息条。 设置输入文本左对齐: dynamic_item_text_align_left = TRUE; 接下来是创建动态列表函数: wgui_dynamic_list_create_icontext_menu( number_of_items, get_item_func, get_hint_func, WGUI_LIST_INVALID_HIGHLIGHT, MMI_FALSE, UI_dummy_function, 0, 0, NULL); 第一个参数:动态列表项数; 第二个参数:获取列表项文本集函数; 第三个参数:获取总的列表数; 第四个参数:默认高亮ID; 第五个参数:是否获取动态数据,这里否。 第六个参数:数据加载前得回调函数,一个空函数; 第七个参数:是否禁用快捷键,这里不禁用 第八个参数:屏幕模板的ID 第九个参数:Buffer的历史机制。 接下来是检查显示菜单: if (wgui_check_application_present) { application_present = wgui_check_application_present(&max_entries); /* true in case of dictionary */ } else { application_present = MMI_FALSE; } 设置最大菜单项数: set_menu_item_count(number_of_items); 设置菜单项顶部对齐: MMI_fixed_list_menu.flags |= UI_LIST_MENU_ALIGN_TO_TOP; 对菜单项进行重绘: resize_fixed_list(MMI_content_width, list_height); move_fixed_list(0, MMI_SUBMENU_CONTENT_Y + INFORMATION_BAR_HEIGHT); 设置历史机制: h_flag = set_list_menu_category_history(MMI_CATEGORY200_ID, history_buffer); h_flag为0,则表示history_buffer为空。其实真正的内涵是, 当从主界面进入到类表菜单时,h_flag为0;因为这个时候不需要界面属性保存。 当三级菜单进入列表菜单时,h_flag不为0。这个时候就需要界面属性保存了。 input_box_x = CAT200_INPUTBOX_X; input_box_y = UI_device_height - MMI_virtual_keyboard.height - CAT200_INPUTBOX_H; input_box_width = MAIN_LCD_DEVICE_WIDTH - CAT200_INPUTBOX_X - CAT200_MARGIN_WIDTH - 1 定义输入框的起始点和宽度 if (h_flag) { S32 size = sizeof(list_menu_category_history); size = (size + 3) / 4; size *= 4; dynamic_list_goto_item_no_redraw(MMI_fixed_list_menu.highlighted_item); wgui_inputs_sl_disable_up_down_key_register(MMI_TRUE); wgui_inputs_sl_setup( input_box_x, input_box_y, input_box_width, CAT200_INPUTBOX_H, buffer, buffer_max_length, MMI_CATEGORY200_ID, get_string(right_softkey), get_image(right_softkey_icon), IMM_INPUT_TYPE_QUICK_SEARCH, (U8*) (history_buffer + size), 1); if (cat200_search_function) { if (!application_present) { S32 no_entries; no_entries = cat200_search_function((U8*) MMI_singleline_inputbox.text); load_dynamic_item_buffer(no_entries); refresh_search_list_change_list_ext(no_entries, MMI_fixed_list_menu.highlighted_item); } } } else /* initial */ { dynamic_list_goto_item_no_redraw(highlighted_item); wgui_inputs_sl_disable_up_down_key_register(MMI_TRUE); wgui_inputs_sl_setup( input_box_x, input_box_y, input_box_width, CAT200_INPUTBOX_H, buffer, buffer_max_length, MMI_CATEGORY200_ID, get_string(right_softkey), get_image(right_softkey_icon), IMM_INPUT_TYPE_QUICK_SEARCH, NULL, 1); } 当然我第一次从主界面进来的时候,就不需历史机制处理了,因此在else中做初始化。 初始化所做的事情分别是: 1、跳到默认高亮显示的地方; 2、激活单选框的上下按键以便可以通过上下键来选中菜单; 3、创建单选输入框; wgui_inputs_sl_setup( input_box_x, input_box_y, input_box_width, CAT200_INPUTBOX_H, buffer, buffer_max_length, MMI_CATEGORY200_ID, get_string(right_softkey), get_image(right_softkey_icon), IMM_INPUT_TYPE_QUICK_SEARCH, NULL, 1); } 第1~4个参数:起始点、宽、高; 第5个参数:这里应该是输入框、存储的字符串,前面已经猜想过; 第6个参数:输入的最大字符数; 第7个参数:模板ID; 第8~9个参数:获取右软键Caption和图标; 第10个参数:输入类型; 第11个参数:历史机制缓冲区(由于是属于else初始化部分,因此为NULL) 第12个参数:信息条状态 if语句部分大致相同,不在分析。 接下来的这行代码是设置单行输入框的主题: gui_set_single_line_input_box_theme(&MMI_singleline_inputbox, &cat200_singleline_inputbox_theme); 第1个参数:是输入框的ID,它是一个全局变量; 第2个参数:是单行输入框的主题,它是一个特定的数据结构:UI_single_line_input_box_theme,用来设置属性的。 保图片,此图片是输入框最左边得图片: cat200_search_img = search_image; 接下来调整动态菜单项的最大宽度。 resize_dynamic_icontext_menuitems_to_list_width(); 关于弹出高亮项的ID的描述: if (h_flag) { set_dynamic_pop_up_descriptions(MMI_fixed_list_menu.highlighted_item); if (application_present) { if (MMI_fixed_list_menu.highlighted_item <= 0) { ClearKeyHandler(KEY_UP_ARROW, KEY_EVENT_DOWN); ClearKeyHandler(KEY_VOL_UP, KEY_EVENT_DOWN); } } } else { set_dynamic_pop_up_descriptions(highlighted_item); } 发现F11跟进下面的函数后 singleline_inputbox_input_callback(); 到了这个函数的实体,真的名副其实的callback! void wgui_inputs_sl_handle_input(void) 那么就来看看这个函数的描述:处理单行输入框的文本。 if (!h_flag) { if (number_of_items > 0) { set_left_softkey_label(wgui_singleline_inputbox_LSK_label_string); set_left_softkey_icon(wgui_singleline_inputbox_LSK_label_icon); redraw_left_softkey(); register_left_softkey_handler(); set_left_softkey_function(wgui_singleline_inputbox_LSK_function, KEY_EVENT_UP); set_left_softkey_function(UI_dummy_function, KEY_EVENT_DOWN); } else { set_left_softkey_label(NULL); set_left_softkey_icon(NULL); redraw_left_softkey(); set_left_softkey_function(UI_dummy_function, KEY_EVENT_UP); set_left_softkey_function(UI_dummy_function, KEY_EVENT_DOWN); } } 设置左右键资源,以及相应函数之类的。 这行太重要了,这里是注册输入框编辑文本改变时响应的回调函数: register_singleline_inputbox_input_callback(wgui_cat200_editor_change_callback); 下面我们来重点看看wgui_cat200_editor_change_callback函数: /***************************************************************************** * FUNCTION * wgui_cat200_editor_change_callback * DESCRIPTION * editor change callback * PARAMETERS * void * RETURNS * void *****************************************************************************/ void wgui_cat200_editor_change_callback(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ gdi_layer_lock_frame_buffer(); refresh_search_list(MMI_singleline_inputbox.text); wgui_inputs_sl_handle_input(); gdi_layer_unlock_frame_buffer(); gdi_lcd_repaint_all(); } 现在我们通过改变文本后断下这个函数, 首先进入的是搜索函数refresh_search_list(MMI_singleline_inputbox.text);,我们必须怀中目的来:其一,搜索的对象是从哪里来的,其二怎样搜索。 /***************************************************************************** * FUNCTION * refresh_search_list * DESCRIPTION * Refreash search list * PARAMETERS * name [IN] Name to search * RETURNS * void *****************************************************************************/ void refresh_search_list(U8 *name) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 no_entries = 0; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ MMI_ASSERT(cat200_search_function != NULL); no_entries = cat200_search_function(name); MMI_ASSERT(no_entries >= 0); /* return entry must >=0 or list will have problem */ load_dynamic_item_buffer(no_entries); if ( ((g_dm_data.s32CatId == MMI_CATEGORY199_ID) && (g_wgui_cat199_has_checkbox == MMI_FALSE)) || ((g_dm_data.s32CatId == MMI_CATEGORY200_ID) && (g_wgui_cat200_set_specific_highlight == MMI_TRUE)) ) { if (wgui_inputs_sl_is_empty() && (no_entries >= (WGUI_CAT199_DEFAULT_HIGHLIGHT_ITEM + 1))) { /* there are some items */ /* because first line is "Add new content", should not highlight on first line */ refresh_search_list_change_list_ext(no_entries, WGUI_CAT199_DEFAULT_HIGHLIGHT_ITEM); } else { refresh_search_list_change_list_ext(no_entries, 0); } } else { refresh_search_list_change_list_ext(no_entries, 0); } gdi_layer_blt_previous(0, 0, UI_device_width - 1, UI_device_height - 1); } 现在牵涉的函数栈比较多,因此只能就近代码讲。上面红色的是基本流程,其实只要抽象出来就可以了,一个是获取搜索结果的记录条数,一个数刷新界面的菜单数。下面我们来重点看着两个函数: 函数一:S32 mmi_phb_quick_search_find_entry,其代码好长,可参考源文件,其大致的流程: 1、首先计算关键字的长度; 2、获取PB联系人的首字:0bb9。 3、首先直接跟字母比较,看是不是字母; 4、取出全局保存的用户名首字母,从g_phb_qsearch_cache数组中取。 5、与关键字比较,相同则结果加1。 锁层: gdi_layer_unlock_frame_buffer(); 接下来: ExitCategoryFunction = ExitCategory200Screen; dm_setup_category_functions(dm_redraw_category_screen, GetCategory200History, GetCategory200HistorySize); dm_data.s32flags = DM_CLEAR_SCREEN_BACKGROUND; #ifdef __MMI_TOUCH_SCREEN__ dm_data.s32flags |= DM_SHOW_VKPAD; dm_data.s32ScrId = (S32) GetActiveScreenId(); dm_data.s32CatId = MMI_CATEGORY200_ID; dm_setup_data(&dm_data); dm_register_category_controlled_callback(RedrawCategoryControlledArea200Screen); 1、设定模板退出函数; 2、dm_setup_category_functions函数来完成,看参数主要完成两个功能,一是重绘;二是历史机制。其事实也是这样的。 3、清楚背景; 4、触摸屏优先则显示虚拟键盘; 5、获取屏幕ID; 6、设置模板ID; 7、注册历史机制; 注册触摸屏事件: #ifdef __MMI_TOUCH_SCREEN__ dm_register_vkpad_callback(wgui_cat200_virtual_keypad_callback); wgui_register_category_screen_control_area_pen_handlers(Cate200CategoryControlAreaPenDownHandler, MMI_PEN_EVENT_DOWN); wgui_register_category_screen_control_area_pen_handlers(Cate200CategoryControlAreaPenUpHandler, MMI_PEN_EVENT_UP); wgui_register_category_screen_control_area_pen_handlers(Cate200CategoryControlAreaPenMoveHandler, MMI_PEN_EVENT_MOVE); wgui_register_category_screen_control_area_pen_handlers(Cate200CategoryControlAreaPenLongTapHandler, MMI_PEN_EVENT_LONG_TAP); wgui_register_category_screen_control_area_pen_handlers(Cate200CategoryControlAreaPenRepeatHandler, MMI_PEN_EVENT_REPEAT); #endif /* __MMI_TOUCH_SCREEN__ */ ShowCategory200Screen函数中的最后一个函数: dm_redraw_category_screen(); 注册200屏幕的历史机制: SetCategory200RightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP); 分别对两种按钮事件进行注册: SetCategory200LeftSoftkeyFunction(mmi_phb_entry_op_option, KEY_EVENT_UP); SetLeftSoftkeyFunction(mmi_phb_entry_op_option, KEY_EVENT_UP); 设置软中键的事件,不知道什么原因就没有出发过这个注册函数。
/
本文档为【Iphone PhoneBook(iphone 电话本 MTK)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索