MTK中的hilite,hint函数处理

 

在进入一个新的Screen的Entry函数中,为什么还要有:    RegisterHighlightHandler()?   我的理解是假设即将进入的SCREEN有3个MENU,每个MENU在该APPLICATION的初始函数中都已经设置了Hilite函数。进入该SCREEN之后,就直接调用设置的Hilite handler就可以了。为什么还要在这里显示的Register??

是不是因为有些SCREEN没有MENU,只有一些索引让用户选择??

自己解答:在一个Entry函数中,注册:RegisterHighlightHandler(ExecuteCurrHiliteHandler);

void RegisterHighlightHandler(void (*f) (S32 item_index))

{

    MMI_list_highlight_handler = f;

    MMI_matrix_highlight_handler = f;

    MMI_circular_3D_highlight_handler = f;

}

实际上就是把以上3个函数指针都指向ExecuteCurrHiliteHandler()这个函数。当进入新的Screen之后,注意Hilite Event是内部事件,是由Framework自动调用的。于是当某一MENU highlight时,就调用上面3个函数中的某一个(根据显示的方式来决定调用其中某一个吗?)。由于设置了他们都指向ExecuteCurrHiliteHandler(),因此实际上都是执行这个函数。传递的参数是highlight menu的索引值。(从0开始)。然后调用ExecuteCurrHiliteHandler_Ext(S32 hiliteid)函数。在这个函数中,查找maxHiliteInfo这个全局变量中是否保存了该MENU ID的entryFuncPtr()函数,也就是highlight handler函数。如果有,则执行,可以做一些:改变左键或右键的标签,改变处理函数等等。

 

引申: hint的处理

       如果某个SCREEN中的MENU有一些POP hint信息,那么在一个SCREEN的Entry函数中,有类似这样的函数

ConstructHintsList(MENU_ID_BGSND_CM_OPT_EFFECT, hintList);

这个函数的执行过程是:根据SCREEN的panrent menu ID获取他有N个child menu。然后查找maxHiliteInfo[hiliteItemID[i]].hintFuncPtr是否存在,也就是hint handler。如果存在就执行一次(目的是更新hintData【】里面的提示信息),然后把hintData【】里面的信息拷贝到hintList中。如果某个MENU没有hint handler,那么hintList中对应项就为NULL。

最后,在ShowCategoryXXScreen()的时候,把hintList设为参数就可以了。

注意:highlight handler AND hint handler都是在初始化函数中设置好的。

 

     本文章为自己刚接触MTK时的学习笔记,如有错误,请不吝赐教!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七斗星

赏点银子去植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值