am架构学习笔记(二) 屏幕切换
2008-01-08 23:16
375 查看
一、 am屏 切换到 am屏
am屏切换到am屏,一般由按键事件引发,在am消息处理中,触发MSG_HW_KEYPAD事件,处理该消息时调用Am_EventHandlerFunc函数,再由全局变量g_nEvent的值来决定是否创建am屏。
具体步骤:
1,push/pushEx函数:通过push/pushEx函数,将即将写入的屏幕参数写入屏幕栈的顶层,将旧屏压入第二层。同时在push/pushEx函数中将g_nEvent的值置为LAYERCHANGE。
2,继续Update旧屏的剩下的model。
3,Update完后,若g_nEvent为LAYERCHANGE,则开始创新的am屏。注意:此时的pCurrentBaseLayout仍指向旧屏,因为此时旧屏还没有free掉。
4,创屏准备工作:1,free掉旧屏,pCurrentBaseLayout = NULL;
2,free掉旧屏的hash表,新建本屏幕的hash表。
3,从layoutStack中取出param,该参数存储旧屏传过来的参数。并将这些参数写入新屏的hash表。
5,pCurrentBaseLayout赋值,由于新屏的入口函数已经写入在push/pushEx函数里写入到pScreenList->f_CreateScreen字段里,因此通过:
CreateFun = layoutStack.f_GetCreateFun();
*pCurrentBaseLayout = CreateFun((atom_t_graphics *)(&g_graphicsContext), *param);
即可将所有参数写入pCurrentBaseLayout中,注意,此时只是对新屏的所有model的参数进行了复制,还没有创建。
Note: pCurrentBaseLayout是一个指向am_t_model的指针,因此他可以接受所有model的返回值,因为所有的model类型都继承于am_t_model类型。
6,(*pCurrentBaseLayout)->update((*pCurrentBaseLayout), (t_rect*)&LCD_Screen, *param);
Upadate新屏的所有model,注意此时只是将所有model写到显存,还没有画出来。
7,响应AM_MSG_MMI_PAINT消息,Am_MMI_Render(pCurrentBaseLayout, param);会渲染新屏的所有model。
am屏切换到am屏,一般由按键事件引发,在am消息处理中,触发MSG_HW_KEYPAD事件,处理该消息时调用Am_EventHandlerFunc函数,再由全局变量g_nEvent的值来决定是否创建am屏。
具体步骤:
1,push/pushEx函数:通过push/pushEx函数,将即将写入的屏幕参数写入屏幕栈的顶层,将旧屏压入第二层。同时在push/pushEx函数中将g_nEvent的值置为LAYERCHANGE。
2,继续Update旧屏的剩下的model。
3,Update完后,若g_nEvent为LAYERCHANGE,则开始创新的am屏。注意:此时的pCurrentBaseLayout仍指向旧屏,因为此时旧屏还没有free掉。
4,创屏准备工作:1,free掉旧屏,pCurrentBaseLayout = NULL;
2,free掉旧屏的hash表,新建本屏幕的hash表。
3,从layoutStack中取出param,该参数存储旧屏传过来的参数。并将这些参数写入新屏的hash表。
5,pCurrentBaseLayout赋值,由于新屏的入口函数已经写入在push/pushEx函数里写入到pScreenList->f_CreateScreen字段里,因此通过:
CreateFun = layoutStack.f_GetCreateFun();
*pCurrentBaseLayout = CreateFun((atom_t_graphics *)(&g_graphicsContext), *param);
即可将所有参数写入pCurrentBaseLayout中,注意,此时只是对新屏的所有model的参数进行了复制,还没有创建。
Note: pCurrentBaseLayout是一个指向am_t_model的指针,因此他可以接受所有model的返回值,因为所有的model类型都继承于am_t_model类型。
6,(*pCurrentBaseLayout)->update((*pCurrentBaseLayout), (t_rect*)&LCD_Screen, *param);
Upadate新屏的所有model,注意此时只是将所有model写到显存,还没有画出来。
7,响应AM_MSG_MMI_PAINT消息,Am_MMI_Render(pCurrentBaseLayout, param);会渲染新屏的所有model。
相关文章推荐
- J2ME学习笔记--实现手机屏幕的切换
- J2ME学习笔记--实现手机屏幕的切换
- am架构学习笔记(一) 四种model的update函数的异同
- Hbase 学习笔记(四): Hbase的架构和实现原理
- 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头
- OpenGL学习笔记:如何屏幕定位
- iOS学习笔记(三)——iOS系统架构
- silverlight 学习笔记 (四): MVVM+WCF Ria开发架构
- ios学习笔记:控制器的切换
- Cocos2d-x学习笔记(九)实例——场景自动切换
- 大型网站架构学习笔记
- iOS屏幕旋转学习笔记
- android 笔记之------Activity:如何进行屏幕切换
- SilverLight学习笔记--Silverligh之如何显示用户自定义的 Splash Screen (初始屏幕)
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法
- iOS屏幕旋转学习笔记
- 微信公号“架构师之路”学习笔记(一)-无限容量数据库架构设计(数据库分组、分片架构等)
- 优酷网架构学习笔记
- iOS 学习笔记 视图切换