用C实现helloworldHelloWorld是在计算机屏幕上输出“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、字串所属的程序名(可任意写)、字串的最大长度、字串描述(可任意写),之后就是各种语言对应的字串。 |