疯壳-MTK智能穿戴入门篇-MTK编程——资源

MTK编程——资源

MTK的资源分为很多种,有图片资源、铃声资源、字符串资源、屏幕资源、菜单资源、定时器资源、nvram 资源,消息接收器等。所有的资源都定义在 .res 文件中,使用 XML 语句书写,所有的资源在 res 文件中都是用<APP id="APP_NAME"></APP>包含,而 APP_NAME 需要在mmi_pluto_res_range_def.h 文件中设置各个资源的个数。

例如:

blob.png

(1)MMI_RES_DECLARE(APP_MAINMENU, 300, ".\\MMI\\MainMenu\\MainMenuRes\\")

APP_MAINMENU定义在MainMenuRes.res 文件中,包含所有的资源。300 是指资源的最大个数,这里并不是所有资源相加的,而是图片、字串等资源各自可以添加300个。".\\MMI\\MainMenu\\MainMenuRes\\"表示APP_MAINMENU 所在资源文件的目录。

(2)#define MAIN_MENU_BASE                       ((U16) GET_RESOURCE_BASE(APP_MAINMENU))

资源ID 的最小取值,所有资源ID 的数字大于MAIN_MENU_BASE

(3)#define MAIN_MENU_BASE_MAX                   ((U16) GET_RESOURCE_MAX(APP_MAINMENU))

资源ID 的最大取值,所有资源ID 的数字小于MAIN_MENU_BASE,实际上MAIN_MENU_BASE + 300 = MAIN_MENU_BASE_MAX。

添加完资源之后,都需要使用 make resgen(make  FengKe2502C_11C GPRS  resgen)编译资源,生成二进制。如果在真机上调试,在make resgen之后还需要使用 make r mmiresource 重新编译资源模块,或者直接使用 make u mmiresource 编译,在模拟器上调试可以不用编译mmiresource。

资源编译之后,都会在plutommi\Customer\CustomerInc目录下生成一个mmi_rp_app_name_def.h 的文件,比如上面的app_name 为APP_MAINMENU,则生成的文件名为mmi_rp_app_mainmenu_def.h 。在该文件中,所有同类型的资源都会生成一个enum枚举,枚举命名格式为mmi_rp_app_name_style_enum,style为资源类型,比如mmi_rp_app_mainmenu_str_enum 则为所有的字串资源ID。如果res文件中的ID,在这个文件里能够找到,说明资源生成成功。习惯上所有资源ID名称都用大写。

 

屏幕资源

在 MTK 设备上,每一个屏幕都对应唯一一个屏幕ID。屏幕之间的相互切换,屏幕历史堆栈管理,都是通过屏幕 ID 进行的。屏幕资源的添加方法使用如下语句:

<SCREEN id="SCREEN_NAME"/> 或者 <SCREEN id="GROUP_NAME"/>

屏幕ID资源的命名方式,习惯上以 SCR_开头,比如 <SCREEN id="SCR_ID_IDLE_MAIN"/>,或者以GRP_ 开头。比如 <SCREEN id="GRP_ID_IDLE_MAIN"/>。通常情况下,以SCR_开头的资源一般作为实际的单个屏幕,而以GRP_开头的资源都用于屏幕组(group),一个GRP屏幕组下面,可以包含多个SCR屏幕,当你关闭一个GRP屏幕组时,那么其下的所有SCR屏幕都被关闭了。实际上SCR 和 GRP 都是同类型的资源,在使用的时候反过来也没有问题,但我们反对这么做,因为从命名上来看会导致歧义,减弱代码的可读性和可维护性。在MTK中所有的屏幕是呈一个树形结构,(见下图)

 

以下介绍几个常用的屏幕相关接口:

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

函数功能:创建一个屏幕组。

参数parent_id:屏幕组的父类,通常情况下可以填GRP_ID_ROOT。

参数group_id:是要创建的屏幕组ID。

参数proc:屏幕组的消息处理函数

参数user_data:用户需要传递的数据,通常情况下用 NULL

 

2、 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)

函数功能:进入一个屏幕。

参数parent_id:屏幕的父类,可以是我们自定义的屏幕组,也可以填GRP_ID_ROOT。

参数scrn_id:屏幕ID。

参数exit_proc:退出屏幕时的处理函数,一般用于释放资源。如果没有退出函数,则填NULL。

参数entry_proc:屏幕的入口函数,当屏幕从历史堆栈中弹出时,会执行这个函数。

参数scrn_type:屏幕类型,一般常用的是MMI_FRM_FULL_SCRN 和MMI_FRM_UNKNOW_SCRN

3、 mmi_ret mmi_frm_group_close (MMI_ID group_id)

函数功能:关闭屏幕组group_id

4、 mmi_ret mmi_frm_scrn_close (MMI_ID parent_id, MMI_ID scrn_id)

函数功能:关闭屏幕组parent_id下的scrn_id屏幕

5、 void mmi_frm_scrn_close_active_id (void)

函数功能:关闭当前处于激活状态的屏幕,即用户能够看到的屏幕。

6、 U16 GetActiveScreenId(void)

函数功能:获取当前处于激活状态的屏幕ID。

 blob.png

屏幕ID树状结构

 

接下来我们自己定义一个屏幕ID,屏幕组ID暂时不讲解。在Idle.res文件中找到<SCREEN id=

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值