一、快捷方式:接收数字
在show一个fixed list的时候,例如:ShowCategory53Screen(),其调用顺序是:
ShowCategory53Screen()
ShowCategory353Screen()
ShowListCategoryScreen()在这个函数中,会执行:register_fixed_list_shortcut_handler()即是用来注册快捷方式的。
比如:进入【通话设置】中的【呼叫等待】列表:
1开启
2关闭
3查询
进入某一个选项的方式有2种:
1.传统方式:通过方向键高亮一个选项,然后按下左软件;
2.快捷方式:直接在键盘上按下1,或者2,或者3。
快捷方式中,例如按下数字键2,进入:menu_shortcut_handler_keyinput(),把输入的数字保存在MMI_menu_shortcut_box中。用户可输入最发数字是99,即在输入第一个数字之后,在一个定时器溢出之前输入第二个数字即可。
定时器溢出后,进入:menu_shortcut_handler_timeout()。其中有几个注意之处:
(1)gdi_layer_lock_frame_buffer()---锁定
(2)menu_shortcut_goto_item(menu_shortcut_item_highlighted)---高亮选项,相当于利用 方向键高亮该选项。
(3)gdi_layer_unlock_frame_buffer()--解锁
(4)menu_shortcut_item_selected(menu_shortcut_item_highlighted)—进入该选项,相当 于按下左软件。
二、快捷方式—接收字母
按数字键2一次,等同于输入a;
按数字键2两次,等同于输入b;
按数字键2三次,等同于输入c;
一下以此类推。
要实现这样的快捷方式,在ShowCategoryXXXScreen()之后,要设置:
set_numberless_multitap();
register_multitap_no_draw_key_handlers();
set_multitap_functions(mmi_SNF_list_alpha_index, mmi_SNF_list_alpha_index_input_callback);
change_multitap_mode(0);
蓝色的两个函数为注册的CBACK函数。例如:
void mmi_SNF_list_alpha_index(U16 input)
{ //获取输入的字母(MTK6225接收的是大小字母)
if (input >= 'A' && input <= 'Z')
{
highlight = g_SNF_alpha_index_list[input - 'A'];
highlight --;
}
fixed_list_goto_item((S32) highlight a);
}
void mmi_SNF_list_alpha_index_input_callback(void)
{ \\高亮
fixed_list_goto_item((S32) highlight);
}