有关10A代码中history的理解

这篇博客探讨了10A代码中history管理的实现,不同于以往的出入栈方式,10A采用树形结构以GROUP为节点。详细讲解了如何创建GROUP,进入GROUP,以及如何在GROUP间切换。重点介绍了mmi_frm_group_create、mmi_frm_group_enter、mmi_frm_scrn_enter等函数的作用,并提供了在编写应用时如何利用这些功能的建议。
摘要由CSDN通过智能技术生成

========================================================================================================================================

有关10A代码中history的理解:

========================================================================================================================================

 

我们之前0932的代码history采用的是出入栈的方式

当调用EntryNewScreen()函数先将上次执行EntryNewScreen()时记录的screenIDentry函数(假设有)或者exit函数(假设有)函数加入栈内,

并且执行上次的exit函数;采用的是直线形的方式

也可采用gobackhistory()进行出栈的操作!

并且设置了栈的最大值为50

所以我们写的很多关于TAB的应用都需要使用

DeleteScreenIfPresent(U16 ScrId)进行删除节点的操作!

 

***************************************一下部分为猜测,请勿全信**************************************************************

10A的代码不同于,采用的是树形的结构!以为GROUP为节点!

 

MMI_ID mmi_frm_group_create (MMI_ID parent_id, MMI_ID group_id, mmi_proc_func proc, void *user_data)

创建GROUP,使用了add_node函数

请留意第三个参数,此回调函数基本都为switch形式!

 

static void add_node(list_struct *list, list_struct *node)

将此GROUP添加到树形结构中!

 

MMI_ID mmi_frm_group_enter (MMI_ID group_id, mmi_group_enter_flag flag)

进入新的GROUP,将GROUP加入到history

mmi_frm_group_createmmi_frm_group_enter基本都在一起!

 

void mmi_frm_scrn_first_enter (MMI_ID parent_id, MMI_ID scrn_id, FuncPtr entry_proc, void *user_data)

进入GROUP节点后使用此函数进入每个GROUP内部的第一个SCREEN,请注意第三个参数!entry_proc为回调函数!

entry_proc函数就开始绘制我们的界面了!

 

MMI_BOOL mmi_frm_scrn_enter (MMI_ID parent_id, MMI_ID scrn_id, FuncPtr exit_proc, FuncPtr entry_proc, mmi_frm_scrn_type_enum scrn_type)

此函数在进入当前GROUP的第二个屏幕时候会调用,并且将之前的屏幕信息加入到history中,这个类似于之前的EntryNewScreen函数

 

void mmi_frm_scrn_close_active_id (void)    ==  void GoBackHistory(void)

返回到同一个GROUP的前一个SCREEN,如果此SCREEN为当前GROUP栈内的唯一SCREEN,则返回到前一个GROUP

 

mmi_ret mmi_frm_group_close (MMI_ID group_id)

关闭group栈内的某个group节点

 

*************************************************************************************************************

个人觉得当你写应用时,还是采用一个SCREEN对应一个GROUP的方式!

当做有关TAB的应用时,需要反复进入新的GROUP时,采用mmi_frm_group_close删除前个GROUP的节点

**************************************************************************************************************

 

下面两个函数解BUG的时候应该比较有用

 

mmi_frm_scrn_get_active_id(void)

判断当前处于哪个SCREEN

 

mmi_frm_group_get_active_id(void)

判断当前处于哪个GROUP

 

========================================================================================================================================

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值