打印
[华禹工控]

MTK入门——用C实现helloworld(二)

[复制链接]
2846|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
华禹支持|  楼主 | 2010-3-9 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5. 装载资源
资源ID定义好了之后,接下来就要装载资源,这个过程需要单独创建一个文件,这里命名为Res_MyTestApp.c,保存在plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\下,然后在plutommi\Customer\ResGenerator\Makefile中添加一行-I “ ../..MMI/MyTestApp” \,该文件是资源装载预编译程序的Makefile
接下来就是装载字串、图像和菜单资源,每种资源的添加都是由相应的一个宏来操作的,在Res_MyTestApp.c文件里定义一个函数PopulateMyTestAppResvoid),具体添加为:
void PopulateMyTestAppRes(void)
{

ADD_APPLICATION_STRING2(STR_ID_HELLO_WORLD,

“Hello,World”, “Hello,World”);
ADD_APPLICATION_IMAGE2(IMG_ID_HELLO_WORLD,
CUST_IMG_PATH”\\\\MainLCD\\\\MyTestApp\\\\MyTestApp.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
从参数列表可以看到,如果菜单项有子菜单的话,则必须将其在参数列表中一一列举出来,我们将HelloWorld菜单加在了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((“PopulatingMain Menu Resources\n”));

PopulateMainMenuRes();


PRINT_INFORMATION((“PopulatingMyTestAppRes Resources\n”));

PopulateMyTestAppRes();

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

6.
菜单项初始化
上面的各步骤已经为我们的程序提供了基本的条件,接下来还要将菜单项初始化。在
MTK平台中,菜单项的行为由菜单项自己控制,系统的运行是通过一些按键、协议事件、中断事件等完成的。这样,当产生一定的事件时,系统为了能知道接下来该如何处理,就需要在此前对每种事件进行注册。这些注册的任务一般都是在系统开机初始化的时候完成的。
MTK提供了许多此类注册相关事件的函数,在我们的程序中,需要注册当菜单高亮时系统如何处理,SetHiliteHandler就是用来做此事的,其第一个参数为菜单项ID,第二个参数为当菜单高亮时被调用的函数指针。
另外,我们希望当菜单高亮时通过按左键来进入我们的程序主屏幕。具体的实现如下:
void Highlight_MyTestApp_Hello(void)
{

ChangeLeftSoftkey(STR_GLOBAL_OK,IMG_GLOBAL_OK);

ChangeRightSoftkey(STR_GLOBAL_BACK,IMG_GLOBAL_BACK);

SetLeftSoftkeyFunction(EntryHelloWorld,KEY_EVENT_UP):

SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_UP);
}
void mmi_mytest_init(void)
{

SetHiliteHandler(MENU_ID_HELLO_WORLD,Highlight_MyTestApp_Hello);
}
这里说明一下,mmi_mytest_init为初始化程序,其调用通常被加在MMITask.c文件中的InitAllApplications函数里面。这样,当系统初始化的时候就调用此函数。从程序可以看出,注册后,当Hello,World菜单被高亮后,屏幕的左下角显示OK按钮,这主要是通过ChangeLeftSoftkey来实现的,同样,右下角显示BACK按钮。
SetLeftSoftkeyFunciton设定了左键的功能,可以看到,按键后系统将调用EntryHelloWorld函数,而按右键的话则执行GoBackHistory,即回到历史屏幕(返回上一级菜单)。

相关帖子

沙发
sanguo147| | 2010-4-11 21:36 | 只看该作者
学习中,看看标记

使用特权

评论回复
板凳
thf2008| | 2010-4-11 21:43 | 只看该作者
不错不错,支持楼主

使用特权

评论回复
地板
3B1105| | 2010-4-15 23:18 | 只看该作者
谁能告知我MTK开发的软件啥的啊!

使用特权

评论回复
5
yoyowodeai| | 2010-4-22 15:17 | 只看该作者
对于入门者还是很有帮助的!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

53

帖子

1

粉丝