下面的文字有点乱,只因为对这一块内容没有很好的了解。
Editorpen.c
在输入模式下(比如输入短信),点击屏幕中左右软键之间的软键(也即是切换输入法的按键),会调用函
数mmi_pen_editor_switch_input_method,在这个函数里可能会调用
wgui_handle_inputbox_change_input_mode来切换输入法(也可能是其它函数),接着会调用
mmi_pen_editor_change_handwriting_area来刷新手写的区域(包括刚刚被按下的键).
在函数wgui_handle_inputbox_change_input_mode里调用change_input_mode(在文件
wgui_categories_inputs.c里)和set_MMI_current_input_type来改变输入模式,之后会调用
wgui_redraw_input_information_bar来刷新输入框上面的information_bar.
在函数MMI_all_input_mode_set里有一个重要的全局变量MMI_all_input_mode_set,从名字可以知道
它表示所有的输入模式,它的声明是U8 MMI_all_input_mode_set[INPUT_MODE_MAX_NUM],也即是一个
数组.
在MMITask.c文件里有一个函数MMI_task,这个函数应该相当于main函数.在这个函数里做了很多初始
化的工作.其中包括函数InitializeAll.而
函数InitializeAll里有一个函数InitIME,IME应该就是input methor engine.进入这个函数里面,我
们可以看到输入法的一些重要的信息.
在函数InitIME里我们可找到这一句
InitIMESetting(gIMEModeArray, MMI_all_input_mode_set, MMI_english_input_mode_set,
MMI_all_prefered_input_mode_set);
进入这个函数,仔细查看后我们可以猜到MMI_all_input_mode_set这个数组是由gIMEModeArray来设置
的(当然不仅仅是这样,它由很多因素决定,包括变量MMI_implement_input_mode_set),而我们可以在
StandaloneRes.c文件里找到这一句:
gIMEModeArray = (sIMEModeDetails*) GetProcAddress(hinstLib, "mtk_gIMEModeArray");
我们再次猜测gIMEModeArray其实就是指向mtk_gIMEModeArray的指针,
在文件里IMERes.c有一个全局数组mtk_gIMEModeArray
const sIMEModeDetails mtk_gIMEModeArray[] =
{
/*Multitap ABC*/
{
INPUT_MODE_MULTITAP_UPPERCASE_ABC,
INPUT_TYPE_ALPHANUMERIC_UPPERCASE,
STR_INPUT_METHOD_MENU_MULTITAP_ABC,
STR_INPUT_METHOD_MULTITAP_U_ABC,
1
},
/*Multitap abc*/
{
INPUT_MODE_MULTITAP_LOWERCASE_ABC,
INPUT_TYPE_ALPHANUMERIC_LOWERCASE,
STR_INPUT_METHOD_MENU_MULTITAP_abc,
STR_INPUT_METHOD_MULTITAP_L_ABC,
1
},
......
//PMT END PERSIAN
/*End of Array*/
{
(0xff),
(0xff),
(0xff),
(0xff),
(0xff),
},
};
很明显,如果增加自己的输入法以及输入模式,就要往这里加东西.
改完之后执行make js25 gprs k6 remake mmiresource
另外,MMI_current_input_mode代码当前的输入模式.
MTK工程为我们提供了源代码,所以遇到问题时除了看文档资料之外,看源代码也是一个好办法.看代码
的方法最好的办法就是顺藤摸瓜.一环接一环,最后可能就能找你想要的东西.但是一定要有目标.