MTK编程起步——建立新APP和资源定义

说明:本文档适用MT6253 09a和MT6235 09a平台。本文参考相应文献并作相应修改。

一、添加新程序的步骤:


1、创建目录及文件:
目录一:plutommi\MMI\FirstApp
目录二:plutommi\MMI\FirstApp\FirstAppInc
文件列表:
MyAppDefs.h:用于存放本程序所需要的类型,结构,常量的定义
MyAppProt.h:用于存放本程序中的所有函数声明,但此文件只被本文件的源程序所加载
MyAppGprot.h:也是用于存放函数声明,但是此文件是用于别的程序加载,即此文件中的函数声明的都是对外的接口
MyAppResDef.h:用于存放本资源ID的定义接口
目录三:plutommi\MMI\FirstApp\FirstAppSrc
FirstAppSrc.c程序的主源文件

2、将文件加入项目:
修改make\plutommi\mmi_app\下的三个文件:
1)mmi_app.lis:此文件用来申明MMI所要编译的所有源文件,添加如下一行:
plutommi\MMI\FirstApp\FirstAppSrc\FirstAppSrc.c
2)mmi_app.inc:此文件用来指明MMI所有头文件所在目录,同样添加:
plutommi\MMI\FirstApp\FirstAppInc
3)mmi_app.pth:此文件用来指明MMI所有源文件所在目录,添加:
plutommi\MMI\FirstApp\FirstAppSrc

3、添加程序开关:
方法一:将MMI编译开关添加到文件plutommi\mmi\inc\MMI_features.h:
#define __MMI_FIRSTAPP__
方法二:在make\Option.mak文件末尾添加:
COM_DEFS+=__MMI_FIRSTAPP__

4、在文件头部加入以下语句以加载程序模块:
#ifdef __MMI_FIRSTAPP__
#include "FirstAppGprot.h"
#endif


二、添加资源的步骤:
1、在plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\下添加本程序的资源装载文件Res_FirstApp.c,并在文件中添加函数void PopulateFirstAppRes(void){}
2、在plutommi\Customer\ResGenerator\MakeFile文件中添加如下两行:
-I "../../MMI/FirstApp/FirstAppInc"\
注意此处最后一行末尾是没有“\”的
3、修改plutommi\MMI\Resource\PopulateRes.c文件:
在开头处添加:
#ifdef __MMI_FIRSTAPP__
extern void PopulateFirstAppRes(void);
#endif
在void PopulateResData(void)函数中添加如下代码:
#ifdef __MMI_FIRSTAPP__
RES_PRINT_INFO(("Populating FirstApp Resources\n"));
PopulateFirstAppRes();
#endif
4、添加资源ID范围:
1)在基础ID 统一定义文件plutommi\MMI\Inc\MMIDataType.h中找到RESOURCE_BASE_ENUM枚举类型定义处,合适位置添加如下:
#ifdef __MMI_FIRSTAPP__
RESOURCE_BASE_RANGE(FIRSTAPP, 50),
#endif
2)找到如下定义块:
/* Beginning of resource table */
RESOURCE_BASE_TABLE_BEGIN()
……
/* End of resource table */
RESOURCE_BASE_TABLE_END()
在块中间末尾位置添加:
/****************************************************************************
* FirstApp
*****************************************************************************/
#ifdef __MMI_FIRSTAPP__
#define FIRSTAPP_BASE ((U16)RESOURCE_BASE_FIRSTAPP)
#define FIRSTAPP FIRSTAPP_BASE
#define FIRSTAPP_BASE_MAX ((U16)RESOURCE_BASE_FIRSTAPP_END)
RESOURCE_BASE_TABLE_ITEM(FIRSTAPP)
#endif
3)在我们自己程序的FirstAppResDef.h中给自己的程序添加屏幕序号:
typedef enum
{
SCR_FIRSTAPP_MAIN = FIRSTAPP_BASE + 1,
} SCREENID_LIST_FIRSTAPP;
4)在主程序的EntryFirstAppScreen函数中将调用的EntryNewScreen函数的第一个参数改为SCR_FIRSTAPP_MAIN,即:
void EntryFirstAppScreen(void)
{
EntryNewScreen(SCR_FIRSTAPP_MAIN, NULL, EntryFirstAppScreen, NULL);
……
}

三、字串资源的添加:
1、给字串资源添加ID,即在FirstAppResDef.h中添加:
typedef enum
{
STR_FIRSTAPP = FIRSTAPP_BASE + 1,
STR_FIRSTAPP_HELLOMTK,
STR_FIRSTAPP_TOTAL
}STRINGID_LIST_FIRSTAPP;
2、在plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt中添加一行。
下面是对表格每一列的描述:
第一列是字串ID,与FirstAppResDef.h 中定义的要完全一致。
第二列是字串所属的程序名(可任意写,仅供自己参考)。
第三列指本字串的最大长度(取所有语言中文本最长的一个)。
第四列是字串描述,也可任意写。
从第五列起就是各种语言所对应的字串。
3、在plutommi\Customer\CustResource\PLUTO_MMI\Res_FirstApp.c的函数PopulateFirstAppRes中添加如下一行以用于字串装载:
ADD_APPLICATION_STRING2(STR_FIRSTAPP_HELLOMTK,"Hello,World","FirstApp");
注意:宏ADD_APPLICATION_STRING2用来装载字串,第一个参数用来放字串的ID,第二个参数是字串的默认显示,当ref_list.txt里面找不到相应内容时就拿这个字串来充数,第三个参数是字串的描述,可忽略。
4、使用GetString可将字串资源读取出来,如可将主程序的EntryFirstAppScreen中调用的gui_print_text函数改为:
gui_print_text((UI_string_type)GetString(STR_FIRSTAPP_HELLOMTK));

四、菜单资源的添加:
1、注册菜单ID:
在plutommi\MMI\Inc\GlobalMenuItems.h中的GLOBALMENUITEMSID枚举类型中添加:
#ifdef __MMI_FIRSTAPP__
ORGANIZER_FIRSTAPP_MENU_ID,
#endif
最好和Organizer中的ID放在一起以便于归纳,因为我们注册的菜单在Organizer下。这里我们将自己的菜单放在Organizer菜单下。
注意:新菜单ID一定要放在MAX_MENU_ITEMS_VALUE之前,否则会出问题。
2、在Organizer菜单下添加该新ID:
1)打开plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\Res_MainMenu.c,在OrganizerMenu枚举下添加我们程序的菜单枚举值:(该项影响下一项中ADD_APPLICATION_MENUITEM中第三项ORG_ENUM_TOTAL数量,缺少会导致菜单显示异常)
#ifdef __MMI_FIRSTAPP__
ORG_ENUM_FIRSTAPP,//这里故意写成这样和ORGANIZER_FIRSTAPP_MENU_ID以示区分,只是增加一个菜单名额,和这里具体写什么关系不大
#endif
2)修改if defined(__MMI_VERSION_2__)下的PopulateMainMenuRes函数中宏ADD_APPLICATION_MENUITEM,注意宏的第一个参数是MAIN_MENU_ORGANIZER_MENUID:
/* oganizer */
ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,IDLE_SCREEN_MENU_ID,
ORG_ENUM_TOTAL + 1,
……
#ifdef __MMI_FIRSTAPP__
ORGANIZER_FIRSTAPP_MENU_ID,
#endif
SHOW,MOVEABLEWITHINPARENT|INSERTABLE,DISP_LIST,
MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON));
宏ADD_APPLICATION_MENUITEM用来装载菜单资源,其参数解释如下:
第1个参数:新加菜单项的ID。
第2个参数:新菜单项的上一级菜单ID,即通常所说的Parent ID。
第3个参数:此菜单的下一级菜单项总个数。此处假设总个数为N。
第4个参数~第4+N-1个参数:分别为每一个子菜单项的ID。
第4+N个参数:隐藏属性,一般设为SHOW,此参数暂时不起作用。
第4+N+1个参数:菜单项转移属性,有以下一些可选属性NONMOVEABLE,MOVEABLEWITHINPARENT,
MOVEABLEACROSSPARENT,INSERTABLE,SHORTCUTABLE。可将这些属性任意组合起来,NONMOVEABLE
表示关闭转移属性,目前大部份菜单项都是用的这个属性。SHORTCUTABLE表示此菜单项将添加到快捷菜单列表中。
除了这两个外其它的属性目前暂时都不会用到。
第4+N+2个参数:下级菜单的显示风格,有以下一些风格,可任选其一:
DISP_LIST:列表显示,绝大部份普通菜单都是用此风格。
DISP_MATRIX:矩阵显示,如九宫格,十二宫格等等,一般主菜单都是用此风格。
DISP_CIRCULAR_3D:循环3D 显示,只有主菜单才会用到。
DISP_PAGE:翻页风格,每个菜单项一页,一般只会在主菜单中用到。
DISP_FIXED_GRID:此风格暂时可忽略。
第4+N+3个参数:此菜单项的显示文本串ID。
第4+N+4个参数:此菜单项的小图标ID。
该项实际上是在Organizer菜单建立时多申明我们定义的一个菜单及其ID。
3、修改plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\Res_FirstApp.c,在PopulateFirstAppRes函数刚才修改的后面加上:
ADD_APPLICATION_MENUITEM((
ORGANIZER_FIRSTAPP_MENU,//当前菜单ID
MAIN_MENU_ORGANIZER_MENUID,//父级菜单ID
0,//子菜单无,故为0
SHOW,SHORTCUTABLE,DISP_LIST,STR_FIRSTAPP,0));
该项声明目前建立的菜单,必须和前面一项对应,缺一不可。
4、注册左右键事件和初始化调用
1)修改FirstAppProt.h和FirstAppGprot.h文件:
extern void mmi_firstapp_hilite(void);
extern void mmi_firstapp_init(void);
2)修改FirstAppSrc.c文件,注册左右键事件到初始化函数中:
void mmi_firstapp_hilite(void)
{
SetLeftSoftKeyFunction(EntryFirstAppScreen,KEY_EVENT_UP);
}
void void mmi_firstapp_init(void)
{
SetHiliteHandler(ORGANIZER_FIRSTAPP_MENU_ID,mmi_firstapp_hilite);
}
3)将其初始化到Organizer菜单中:
有两种方式可以做到:
a、在plutommi\MMI\Organizer\OrganizerSrc\Organizer.c下找到OrgInit函数体,在其中添加:
/* firstapp */
#ifdef __MMI_FIRSTAPP__
mmi_firstapp_init();
#endif
b、在plutommi\MMI\Framework\Tasks\TasksSrc\MMITask.c中添加:
……
#ifdef __MMI_FIRSTAPP__
#include "FirstAppGprot.h"
#endif
……
void InitAllApplications(void)
{
……
#ifdef __MMI_FIRSTAPP__
mmi_firstapp_init();
#endif
……
}
4)update一下,然后组建运行一下模拟器,就OK了。

五、图片资源的添加:
1、定义图片ID:
打开FirstAppResDef.h,添加如下代码:
typedef enum
{
IMG_FIRSTAPP=FIRSTAPP_BASE+1
}IMAGEID_LIST_FIRSTAPP;
2、在plutommi\Customer\Images\PLUTO240X320\MainLCD\下新建文件夹FirstApp。
3、在plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\Res_FirstApp.c文件PopulateFirstAppRes函数中添加图片加载代码如下:
ADD_APPLICATION_IMAGE2(IMG_FIRSTAPP,CUST_IMG_PATH"\\\\MainLCD\\\\FirstApp\\\\ICON.BMP","FirstApp ICON");
参数1:图片ID;
参数2:图片路径,宏CUST_IMG_PATH运行时自动转化相应图片更目录,在这里即为plutommi\Customer\Images\PLUTO240X320\;
参数3:图片描述字串。
4、使用make resgen和make remake命令重编译资源并生成bin文件。
5、至上面的4步图片资源已经添加完毕,使用时使用相应图片ID即可,下面为菜单添加图标,继续修改PopulateFirstAppRes函数:
ADD_APPLICATION_MENUITEM((
ORGANIZER_FIRSTAPP_MENU_ID,
MAIN_MENU_ORGANIZER_MENUID,
0,SHOW,SHORTCUTABLE,DISP_LIST,STR_FIRSTAPP,IMG_FIRSTAPP));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值