输入法移植的笔记

下面的文字有点乱,只因为对这一块内容没有很好的了解。

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工程为我们提供了源代码,所以遇到问题时除了看文档资料之外,看源代码也是一个好办法.看代码

的方法最好的办法就是顺藤摸瓜.一环接一环,最后可能就能找你想要的东西.但是一定要有目标.

你可能感兴趣的:(工作,文档,input,输入法,MTK,menu)