天天看點

MTK平台學習--History管理機制與EntryNewScreen函數的關系

主要簡單分析一下左右軟體的事件,以左軟鍵事件為例

牽涉到的常用函數:

     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:  重新整理左軟鍵顯示區域 

繼續閱讀