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_
- .............
- .............
- #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开发之添加资源与菜单学习笔记的内容介绍完了,希望通过本文的学习能对你有所帮助!