在MTK实现helloworld

HelloWorld是在计算机屏幕上输出“Hello,World”,这通常是初学者学习每一门语言所编写的第一个程序,他可以确认该语言的编译器、 开发环境、运行环境是否设置正确,也有助于初学者理解该语言的程序框架。
环境搭建好了,接下来我们就通过在屏幕上输出“Hello World!”这个例子来体验在MTK手机上编写程序。并将其加在“Menu->Organizer->HelloWorld”菜单下面。
在开始程序之前,需要说明的是,MTK平台下开发的C程序和整个系统是一体的,编译的时候也是整体进行编译最终生成同一个bin文件。整个编译过程是由make工具来管理编译的。这样的话,我们编写的程序文件就必须添加编译路径。
1. 添加程序文件和路径
为了规范,用户添加的MMI程序代码一般都放在plutommi/MMI下面(当然也可以放在其它位置)。本例中我们在plutommi/MMI下创建一个文件夹MyTestApp,并在其下创建两个文件MyTestAppSrc.c、MyTestAppDef.h。
接下来就是添加文件的路径,在make/plutommi目录下有三个需要添加路径的文件:plutommi.lis、plutommi.inc、plutommi.pth,分别指明了MMI所要编译的所有源文件、所有头文件所在的目录以及所有源文件所在目录。我们的添加如下:plutommi.lis文件中添加一行plutommi/MMI/MyTestApp/MyTestAppSrc.c、plutommi.inc文件中添加一行plutommi/MMI/MyTestApp,在plutommi.pth文件中添加一行plutommi/MMI/MyTestApp。
2. 资源
MTK环境将字符串、图像、菜单等信息做成了资源的形式。在编译代码之前,如果资源有改变或是第一次进行编译,则首先得生成资源。同时程序中要定义一个与其对应的ID号,以后程序中就通过这个ID来使用这些资源。
所有菜单ID都定义在plutommi/MMI/Inc/GlobalMenuItems.h头文件中,但注意这里菜单ID必须加在MENU_ID_DEVAPP_START之前,不然会导致其产生错误。我们将菜单ID命名为MENU_ID_HELLO_WORLD,然后加入到GLOBALMENUITEMSID枚举类型中:
enum GLOBALMENUITEMSID
{
IDLE_SCREE_MENU_ID = 1,
……
MENU_ID_HELLO_WORLD,
MENU_ID_DEVAPP_START,
MENU_ID_DEVAPP_END = MENU_ID_DEVAPP_START + 100,
MAX_MENU_ITEMS_VALUE,
MENU_ITEM_END
};
字符ID和图像ID将定义在文件MyTestAppDef.h中,在定义之前,先得为我们自己的程序添加一个基础ID,因为所有程序的资源ID都是独自定义到自己的相关文件中,这样就可能产生两个程序的ID相同而冲突,使用基础ID避免了这个问题的产生。
3.添加基础ID
基础ID统一被定义在plutommi/MMI/Inc/MMIDataType.h文件中,我们在枚举类型RESOURCE_BASE_ENUM中添加一个宏RESOURCE_BASE_RANGE(MYTESTAPP, 50),然后在该文件后面的相应位置定义基础ID和该程序的最大ID,方法如下:
typedef enum
{
……
RESOURCE_BASE_RANGE(MYTESTAPP, 50),
RESOURCE_BASE_RANGE(END, 0)
} RESOURCE_BASE_ENUM;
……
#define MYTESTAPP_BASE ((U16)RESOURCE_BASE_MYTESTAPP)
#define MYTESTAPP_BASE_MAX ((U16)RESOURCE_BASE_MYTESTAPP_END)
RESOURCE_BASE_TABLE_ITEM(MYTESTAPP)

RESOURCE_BASE_TABLE_ITEM(END)
RESOURCE_BASE_TABLE_END()
定义好了以后,我们程序的ID从MYTESTAPP_BASE开始,且有50个ID可供使用。需要注意的是,当定义字符或是图像资源ID的时候,都是从已定义的基础ID开始,这不会产生冲突,因为字符和图像是分开管理的。
4. 添加资源ID
下面我们就来具体添加字符串资源和图像资源:在MyTestApp.h文件中添加:
typedef enum
{
STR_ID_HELLO_WORLD = MYTESTAPP_BASE + 1,
}STR_ID_MYTESTAPP;
typedef enum
{
IMG_ID_HELLO_WORLD = MYTESTAPP_BASE + 1,
}IMG_ID_MYTESTAPP;
其分别为字串ID和图像ID,另外,我们再加一个屏幕ID,这将会在后面用到:
typedef enum
{
SCR_ID_HELLO_WORLD = MYTESTAPP_BASE + 1,
}SCREEN_ID_MYTESTAPP;
然后在plutommi/Customer/CustResource/PLUTO_MMI/ref_list.txt中添加下面一行:
STR_ID_HELLO_WORLD Undefined 11 Hello,World Hello,World 你好,世界
每个字串之间用TAB键隔开,它们分别表示字串ID、字串所属的程序名(可任意写)、字串的最大长度、字串描述(可任意写),之后就是各种语言对应的字串。
5. 装载资源
资源ID定义好了之后,接下来就要装载资源,这个过程需要单独创建一个文件,这里命名为Res_MyTestApp.c,保存在plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI/下,然后在plutommi/Customer/ResGenerator/Makefile中添加一行-I “ ../..MMI/MyTestApp” /,该文件是资源装载预编译程序的Makefile。
接下来就是装载字串、图像和菜单资源,每种资源的添加都是由相应的一个宏来操作的,在Res_MyTestApp.c文件里定义一个函数PopulateMyTestAppRes(void),具体添加为:
void PopulateMyTestAppRes(void)
{
ADD_APPLICATION_STRING2(STR_ID_HELLO_WORLD,
“Hello,World”, “Hello,World”);
ADD_APPLICATION_IMAGE2(IMG_ID_HELLO_WORLD,
CUST_IMG_PATH”MainLCDMyTestAppMyTestApp.bmp”, “Hello,World”);
ADD_APPLICATION_MENUITEM((MENU_ID_HELLO_WORLD,
MAIN_MENU_ORGANIZER_MENUID, 0, SHOW, SHORTCUTABLE, DISP_LIST,
STR_ID_HELLO_WORLD, IMG_ID_HELLO_WORLD));
}
下面来具体说明下:宏ADD_APPLICATION_STRING2用来装载字串资源,第一个参数为字符串的ID,第二个参数为字串的默认显示,当ref_list.txt文件里没有添加进去或者出现错误的时候显示该字串,第三个参数为字符串的描述,可任意写。
宏ADD_APPLICATION_IMAGE2用来装载图像资源,第一个参数为图像ID,第二个参数为图像存放的路径,宏CUST_IMG_PATH在运行的时候将被转化为相应的图像跟目录,第三个参数为对图像的描述,可任意写。
图像一般保存在plutomi/Customer/Image目录下主屏所对应的文件夹下的MainLCD文件夹里面,这里我们在其下创建了一个文件夹MyTestApp,将图片命名为MyTestApp.bmp并保存在该文件夹下,然后将MainLCD文件夹打包并命名为image.zip(不打包将会出错),图片支持pbm,bmp,gif等几种格式。
宏ADD_APPLICATION_MENUITEM用来装载菜单资源,其中各参数分别为:
第1个参数: 菜单项的ID。
第2个参数: 菜单项的上一级菜单ID。
第3个参数: 菜单项的下一级菜单项个数,即子菜单的个数,如果有,则将所有子菜单在随后的参数中逐个列出来,此处没有则为0。
第4个参数: 隐藏属性,一般为SHOW。
第5个参数: 菜单项转移属性,可供选择的属性有NONMOVEABLE, MOVEABLEWITHINPARENT, MOVEABLEACROSSPARENT, INSERTABLE, SHORTCUTABLE。这些属性可任意组合使用。
第6个参数: 下一级菜单的显示风格,可供选择的有:
DISP_LIST: 列表显示。
DISP_MATRIX: 矩阵显示。
DISP_CIRCULAR_3D: 循环3D显示。
DISP_PAGE: 翻页风格,每个菜单项一页。
DISP_FIXED_GRID: 此风格暂时不用。
第7个参数: 菜单项的显示字串ID。
第8个参数: 菜单项的图标ID。
从参数列表可以看到,如果菜单项有子菜单的话,则必须将其在参数列表中一一列举出来,我们将Hello,World菜单加在了Organizer菜单下,所以对Organizer菜单来说,必须在其宏ADD_APPLICATION_MENUITEM中加入Hello,World菜单ID。
主菜单和其下一级子菜单的资源在Res_MainMenu.c中装载,在这个文件中,有一个枚举类型OrganizerMenu,它的目的是使得添加的Organizer菜单下的子菜单数目正确,我们在其中添加一项MENU_ENUM_HELLO_WORLD,当然也可以直接将Organizer的菜单装载宏的第三个参数加1。然后在其ADD_APPLICATION_MENUITEM的子菜单参数列表中加入一项MENU_ID_HELLO_WORLD。
装载资源程序添加好以后,还要确保其能被调用到。在plutommi/mmi/Resource/下的PopulateRes.c中做如下修改:

extern void PopulateMainDemoRes(void);
extern void PopulateMyTestAppRes(void);
………..
void PopulateResData(void)
{
……
PRINT_INFORMATION((“Populating Main Menu Resources/n”));
PopulateMainMenuRes();

PRINT_INFORMATION((“Populating MyTestAppRes Resources/n”));
PopulateMyTestAppRes();
……
}
这样,当在生成资源的过程中调用到该函数。
另外,还要在plutommi/Customer/ResGenerator/readexcel.c中包含头文件MyTestAppDef.h。这是由于多国语言功能使得字串资源的生成要通过执行readexcel.exe来读取ref_list.txt中的数据。
注意,这里某个过程可能会调用office库中读表格的相关函数,所以如果没有安装office软件的话,可能会出错

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值