MTK之添加资源与菜单心得
来源:互联网 发布:淘宝网电饭煲厂家直销 编辑:程序博客网 时间:2024/05/22 15:52
以下是本人这半个月来的学习心得,由于生病和编译环境有问题,学习进度很缓慢。感觉三周多了也没学到什么。有点郁闷。
大家跟着我这个流程做,就能从整体上清楚的理清添加资源与菜单的流程,知道为什么要这样做。下面是在6235平台下进行的,其他平台可能代码名称有不同,具体添加方式参考同文件中其他代码的写法就好了,其实MTK的代码需要改动的很少,就是在里面添添,不知道怎么添的时候就参考内部代码。
第一步:添加程序文件:先假设自己写的程序的名字为MyApp
需要添加有:MyAppProt.h (用来存放本程序的所有函数申明,此头文件只被本程序的源文件所加载)
MyAppDefs.h (用来存放本程序的一些普通的资源ID定义)
MyAppTypes.h (用来存放本程序所需的类型,结构,常量定义)
MyAppGprot.h (也是用来存放函数申明的,但是此头文件是被别的程序所加载的,也就是说此文件所申明的都是对外接口)
当然还有源文件MyAppSrc.c
注:以上这些头文件一般放在plutommi/MMI/MyApp/MyAppInc下面,这样方便代码管理
第二步:将文件加入项目
在make/plutommi/下面的三个文件需要修改
1:plutommilis 所需编译的源文件
2:plutommiinc 指明头文件所在目录
3:plutommipth 指明源文件所在目录
第三步:程序开关:
MMI的编译开关一般都放在plutommi/customer/custResource/PLUTO_MMI/MMI_features_switchPLUTO.h中
如下添加:#define _MMI_MYAPP_ (_ON_)
当添加了如上的代码后,在其他文件中的#ifdef _MMI_MYAPP_
.............
.............
#endif
所包围的代码就会被编译。
第四步:为资源添加ID
做完以上三步后,接下来就是添加ID了,资源有很多种,所以添加ID的方式有一些不同
(1)添加基础ID。
在加ID之前先得为本程序添加一个基础ID,因为所有程序的资源ID都是各自为政定义各自的,但这些ID又不能冲突,(因为每种类型的资源ID都是在一个取值空间),所以我们需要基础ID将每个程序的ID取值隔离开来,基础ID为某类资源定义了一个范围,统一定义在plutommi/MMI/INC/MMIDataType.h中
具体就看两个宏定义
/*
* Use this macro two to declare resource id range between RESOURCE_BASE_ENUM_BEGIN()
* and RESOURCE_BASE_ENUM_END()
*/
#define RESOURCE_BASE_RANGE(ap_id, count) /
ap_id, /
GET_RESOURCE_BASE(ap_id) = ap_id, /
GET_RESOURCE_MAX(ap_id) = ap_id + count - 1
/*
* Use these tow macro to get the resource base and resource end
*/
#define GET_RESOURCE_BASE(id) RESOURCE_BASE_##id
#define GET_RESOURCE_MAX(id) RESOURCE_BASE_##id##_END
这样首先通过语句 RESOURCE_BASE_RANGE(ap_id, count) 就可以设定资源 ID的范围,
同时GET_RESOURCE_BASE(ap_id)把ap_id付给RESOURCE_BASE_##id,
最后再通过类似的语句
#define MYAPP_BASE ((U16)GET_RESOURCE_BASE(MYAPP))
把RESOURCE_BASE_##id付给了MYAPP_BASE。
再啰嗦下,也就添加两类代码,一类先是确定资源ID范围,然后一类就是把范围地址赋值给MYAPP_BASE 这类ID。
(2)添加屏幕ID(即屏幕序号)
上面添加完基础ID后,我们就可以利用基础ID来添加我们的屏幕ID了,在MYAPPDefs.h中定义
typedef enum{
SCR_MYAPP-MAIN=MYAPP_BASE+1,
}SCREENID_LIST_MYAPP
(3)添加字串ID
也是利用基础ID,在MYAPPDefs.h中定义
typedef enum
{
STR_MYAPP_HELLO = MYAPP_BASE + 1,
}STRINGID_LIST_MYAPP;
(4)添加图片ID
同上
(5)添加菜单项ID
这个相对特殊,它在plutommi/MMI/inc/GlobalMenuItems.h中定义
第五步:资源的加载
上面四步把ID和资源都定义了,现在我们就需要把它们加载使之关联起来。
(1)主菜单及一级菜单的加载
需要在Res_MainMenu.c修改添加,此处很容易出错,因为多处位置容易添错,首先需要在文件前部定义枚举变量,然后在void PopulateMainMenuRes(void)中调用ADD_APPLICATION_MENUITEM这个函数。
(2)其他菜单项的加载,字符串加载,图片加载
都在plutommi/customer/custresource/pluto_mmi/res_mmi/Res_MyApp.c中的populateMyAppRes函数里加载。
注:populateMyAppRes这个函数被plutommi/MMI/Resource/populateRes.c下的populateResData()调用,而populateResDate()被mtk_resgenerator.exe执行时呼叫。这就是资源装载预编译顺序。
第六步:交互
在平台中,每个菜单项的行为都由菜单项自己控制,系统所做的就是在高亮此项时发个通知过来。所以,每个菜单项都要在开机时通知系统由哪个函数来接收通知,SetHiliteHandler就是用来做此事的,其第一个参数就是菜单项的ID,第二个参数就是接收通知的函数指针。我们通常为每个程序建立一个初始化函数,此函数只在开机时运行一次,比如mmi_myapp_init,在此函数中我们会将本程序所有菜单项都注册一遍。mmi_myapp_init通常在MMITask.c 中被调用。
如:#ifdef _MMI_MYAPP_
#include "MyAppGprot.h"
#endif
void InitAllApplication()
{
#ifdef _MMI_MYAPP_
mmi_myapp_init();
#endif
}
以下在myappsrc.c中实现
void mmi_myapp_init(void)
{
SetHiliteHandler(MENU_ID_MYAPP_PRINT, mmi_myapp_hilite_print);
}
void mmi_myapp_hilite_print(void)
{
SetLeftSoftkeyFunction(mmi_myapp_print_entry,KEY_EVENT_UP);
}
void mmi_myapp_print_entry(void)
{
.................
}
通过以上的6个步骤,基本上就实现了各种资源的定义和加载。如果还有不懂的可以跟我博客交流。
- MTK之添加资源与菜单心得
- MTK之添加资源与菜单心得
- MTK 菜单资源的添加与开关机有关的代码
- MTK手机平台添加资源和菜单的方式
- MTK 6223平台 07A 添加字符串、菜单资源步骤
- MTK手机平台添加资源和菜单的方式(转)
- MTK手机平台添加资源和菜单的方式716557759
- MTK手机平台添加资源和菜单的方式
- MTK手机平台添加资源和菜单的方式(修改)
- MTK手机平台添加资源和菜单的方式
- MTK手机平台添加资源和菜单的方式(转)
- MTK手机平台添加资源和菜单的方式(转)
- MTK手机平台添加资源和菜单的方式
- mtk动态添加菜单
- MTK添加资源方法
- MTK资源添加
- mtk添加资源
- MTK添加资源
- DataExchangeTest.java
- 网络地址的分配及获取
- 文件过滤
- FreeBSD 7.2 apache+apache-tomcat+mod_jk 整合,
- IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)
- MTK之添加资源与菜单心得
- sql2000更改密码的方法
- 和hibernate结合使用的sql split自定义函数
- jQuery入门学习一:原始XMLHttpRequest方法回顾
- Javascript对象继承
- oracle监听错误的另类解决办法
- NetBeans 时事通讯(刊号 # 71 - Sep 08, 2009)
- 白话数字签名(番外篇)—签名EXE文件(上)
- [DirectDraw]显示模式