MTK开发之添加资源与菜单学习笔记

移动开发
MTK开发之添加资源与菜单学习笔记是本文要介绍的内容,主要是来了解MTK开发中的一些操作,具体内容来看本文详解。

MTK开发之添加资源与菜单学习笔记是本文要介绍的内容,主要是来了解MTK开发中的一些操作,本文是小编的网上看到的一篇文章,于此,与大家分享一下。

大家跟着我这个流程做,就能从整体上清楚的理清添加资源与菜单的流程,知道为什么要这样做。下面是在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_

  1. .............  
  2. .............  
  3. #endif 

所包围的代码就会被编译。

第四步:为资源添加ID

做完以上三步后,接下来就是添加ID了,资源有很多种,所以添加ID的方式有一些不同

(1)添加基础ID。

在加ID之前先得为本程序添加一个基础ID,因为所有程序的资源ID都是各自为政定义各自的,但这些ID又不能冲突,(因为每种类型的资源ID都是在一个取值空间),所以我们需要基础ID将每个程序的ID取值隔离开来,基础ID为某类资源定义了一个范围,统一定义在plutommi/MMI/INC/MMIDataType.h中

具体就看两个宏定义

  1. /*  
  2.  * Use this macro two to declare resource id range between RESOURCE_BASE_ENUM_BEGIN()  
  3.  * and RESOURCE_BASE_ENUM_END()  
  4.  */  
  5. #define RESOURCE_BASE_RANGE(ap_id, count)/  
  6. ap_id,   /  
  7. GET_RESOURCE_BASE(ap_id) = ap_id,/  
  8. GET_RESOURCE_MAX(ap_id) = ap_id + count - 1  
  9.  
  10. /*  
  11.  * Use these tow macro to get the resource base and resource end  
  12.  */  
  13. #define GET_RESOURCE_BASE(id)   RESOURCE_BASE_##id  
  14. #define GET_RESOURCE_MAX(id)RESOURCE_BASE_##id##_END 

这样首先通过语句 RESOURCE_BASE_RANGE(ap_id, count) 就可以设定资源 ID的范围,

  1. 同时GET_RESOURCE_BASE(ap_id)把ap_id付给RESOURCE_BASE_##id, 

***再通过类似的语句

  1. #define MYAPP_BASE     
  2. ((U16)GET_RESOURCE_BASE(MYAPP)) 

把RESOURCE_BASE_##id付给了MYAPP_BASE。

再啰嗦下,也就添加两类代码,一类先是确定资源ID范围,然后一类就是把范围地址赋值给MYAPP_BASE 这类ID。

(2)添加屏幕ID(即屏幕序号)

上面添加完基础ID后,我们就可以利用基础ID来添加我们的屏幕ID了,在MYAPPDefs.h中定义

  1. typedef enum{  
  2. SCR_MYAPP-MAIN=MYAPP_BASE+1,  
  3. }SCREENID_LIST_MYAPP 

(3)添加字串ID

也是利用基础ID,在MYAPPDefs.h中定义

  1. typedef enum  
  2. {  
  3. STR_MYAPP_HELLO = MYAPP_BASE + 1,  
  4. }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 中被调用。

  1. 如:#ifdef _MMI_MYAPP_  
  2.  #include "MyAppGprot.h"   
  3.  #endif  
  4. void InitAllApplication()  
  5.    {  
  6. #ifdef _MMI_MYAPP_  
  7.  mmi_myapp_init();  
  8. #endif  
  9.    } 

以下在myappsrc.c中实现

  1. void mmi_myapp_init(void)  
  2. {  
  3. SetHiliteHandler(MENU_ID_MYAPP_PRINT, mmi_myapp_hilite_print);  
  4. }  
  5. void mmi_myapp_hilite_print(void)  
  6. {  
  7.  SetLeftSoftkeyFunction(mmi_myapp_print_entry,KEY_EVENT_UP);  
  8. }  
  9. void mmi_myapp_print_entry(void)  
  10. {  
  11. .................  

通过以上的6个步骤,基本上就实现了各种资源的定义和加载。如果还有不懂的可以跟我博客交流。

小结:MTK开发之添加资源与菜单学习笔记的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: CSDN博客
相关推荐

2011-08-30 16:55:31

MTK开发编译

2011-08-31 10:01:44

MTK开发环境

2011-08-31 10:51:39

MTKAndroid 开发

2011-08-01 16:50:28

Xcode 动态 View

2011-08-30 16:02:10

MTK开发环境

2011-08-31 10:20:26

MTK驱动开发

2009-08-14 17:43:20

C#Windows应用

2011-08-01 17:01:02

Xcode WindowBase View

2011-08-31 10:37:06

MTK开发入门

2010-07-29 13:18:45

Flex右键菜单

2011-03-08 16:30:30

Proftpd命令Proftpd配置

2011-08-30 18:01:20

2012-05-09 10:03:08

JavaMEJava

2011-09-13 15:26:25

MTK环境搭建

2011-08-31 10:12:26

MTK手机平台

2011-08-03 09:44:18

IOS开发 UITextFiel UITableVie

2011-08-30 16:22:00

MTK开发环境

2011-08-31 10:26:38

MTK驱动开发

2011-04-21 15:22:27

ArcGIS Engi

2011-03-08 16:30:24

Proftpd
点赞
收藏

51CTO技术栈公众号