主要簡單分析一下左右軟體的事件,以左軟鍵事件為例
牽涉到的常用函數:
void SetKeyHandler( FuncPtr funcPtr, U16 keyCode, U16 keyType );
void SetLeftSoftkeyFunction( void (*f)(void), MMI_key_event_type k );
void ChangeLeftSoftkey( U16 s, U16 i );
1. SetKeyHandler與SetLeftSoftkeyFunction
(1). SetKeyHandler
主要作用就是将需要起作用的函數的指針(funcPtr)
-->全局矩陣數組currKeyFuncPtrs[keyCode][keyType]的指定位置 ;
(2). SetLeftSoftkeyFunction
該函數内部主要流程:
Step1. call register_left_softkey_handler( )
這個函數call SetKeyHandler: 存儲需要起作用的函數(left_softkey_down/left_softkey_up)
以left_softkey為例, 該函數首先首先重新整理按鍵區域圖像(redraw_softkey),
然後執行關聯函數(softkey_functions[key][k]).
Step2. 在上一步裡我們會發現,softkey_functions[key][k]裡的函數指針沒有初始化
通過 call set_left_softkey_function(f, k);
--->softkey_functions[key][k] = f;
這樣,就成功的把按鍵按下/放開的作用函數與具體的動作關聯起來了。
Step3. 最後call SetInputboxLSKFunction(f)
--->将上述函數與特定的輸入(如觸摸筆)關聯起來。
(3). 以上兩個函數的主要差別:
SetLeftSoftkeyFunction可以識别長按狀态并且可以關聯觸摸筆操作等。
2. ChangeLeftSoftkey
主要執行流程:
Step1. call change_left_softkey: 設定左軟鍵圖表,文字
Step2. redraw_softkey: 重新整理左軟鍵顯示區域