========================================================================================================================================
有关10A代码中history的理解:
========================================================================================================================================
我们之前0932的代码history采用的是出入栈的方式
当调用EntryNewScreen()函数先将上次执行EntryNewScreen()时记录的screenID,entry函数(假设有)或者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_create和mmi_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
========================================================================================================================================