配色: 字号:
MTK6252_10A添加资源
2012-08-06 | 阅:  转:  |  分享 
  
1、文件结构



目录一:plutommi\MMI\FirstApp

目录二:plutommi\MMI\FirstApp\FirstAppInc(该结构未改变)

文件列表:

FirstAppDefs.h:用于存放本程序所需要的类型,结构,常量的定义

FirstAppProt.h:用于存放本程序中的所有函数声明,但此文件只被本文件的源程序所加载

FirstAppGprot.h:也是用于存放函数声明,但是此文件是用于别的程序加载,即此文件中的函数声明的都是对外的接口

FirstAppResDef.h:用于存放本资源ID的定义接口



目录三:plutommi\MMI\FirstApp\FirstAppSrc(该结构未改变)

FirstAppSrc.c程序的主源文件



目录四:plutommi\MMI\FirstApp\FirstAppRes(新的目录)



FirstApp.res:资源文件定义,包含字串、图片、菜单、屏幕等的定义,该文件实际为一个标准xml文件



ref_list_FirstApp.txt:该模块多国语言字串定义(目前发现该文件并未生效,不知道是否是设置问题)







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



4)在plutommi\Customer\ResGenerator\MakeFile文件中添加如下一行:

-I"../../MMI/FirstApp/FirstAppInc"\







3、应用程序ID定义



1)在基础ID统一定义文件plutommi\MMI\Inc\mmi_res_range_def.h(原来为MMIDataType.h)中找到如下定义块:

RESOURCE_BASE_ENUM_BEGIN()

/

DeclareresourceIDrangebelow



/



……



/

DeclareresourceIDrangeabove

/

RESOURCE_BASE_ENUM_END()



在其中添加:



#ifdef__MMI_FIRSTAPP__

RESOURCE_BASE_RANGE(FIRSTAPP,50),

#endif

2)找到如下定义块:

/Beginningofresourcetable/

RESOURCE_BASE_TABLE_BEGIN()

……

/Endofresourcetable/

RESOURCE_BASE_TABLE_END()

在块中间末尾位置添加:

/

FirstApp

/

#ifdef__MMI_FIRSTAPP__

#defineFIRSTAPP_BASE((U16)GET_RESOURCE_BASE(APP_FIRSTAPP))

#defineFIRSTAPP_BASE_MAX((U16)GET_RESOURCE_MAX(APP_FIRSTAPP))

RESOURCE_BASE_TABLE_ITEM_PATH(APP_FIRSTAPP,".\\MMI\\FirstApp\\FirstAppRes\\")//这里较之前有所变化

#endif







4、字串、图片、屏幕资源的添加



先来说字串、图片、屏幕资源ID的添加。10A版本中对资源定义的改动比较大,稍微对比一下新老版本,你会发现很多原来很大的文件变小了,而多出来了很多.res后缀的文件,这就是新版本的资源定义文件。10A版本仍部分保持了老版本的定义方式,不过笔者建议采用新版本的方式来定义资源,而且与之前相比新版本的资源定义要方便不少。读者可以随便找一个res文件,会看到如下定义格式:



/NeededheaderfilesofthecompileoptioninXMLfiles,ifyouneedothersneedtoaddhere/

#include"mmi_features.h"

#include"custresdef.h"



/NeedthislinetotellparserthatXMLstart,mustafterall#include./





/APPtag,includeyourappnamedefinedinMMIDataType.h/

/这里定义的id必须和之前定义的APP的ID一致/



/WhenyouuseanyIDofothermodule,youneedtoadd

thatheaderfilehere,sothatResgencanfindtheID/







/StringIDofyouApplication,wewillgetstringfromref_list.txtforalllanguages/

/在这里添加自己的字串ID/



/这里说下,字串的内容定义和之前的版本一样放在YourProjectPath\plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt下,为了更好的兼容,最好将你自己定义的字串重新规整到YourProjectPath\plutommi\MMI\FirstApp\FirstAppRes\ref_list_FirstApp.txt下,具体定义方式和ref_list.txt类似,参考本博客文章《MTK编程起步——建立新APP和资源定义》/





/ImageIdandpathofyouApplication,youcanusecompileoptioninPath,butneedoutof""/

CUST_IMG_PATH"\\\\MainLCD\\\\FirstApp\\\\HELLO.BMP"



/这里定义自己的图片ID和路径,注意图片现在的CUST_IMG_PATH路径是在YourProjectPath\plutommi\Customer\Images\FTE320x480,请将图片文件夹放在这里,然后打包整个MainLCD文件夹为image.zip(改了mtk_resgenerator.cpp的可以不用打包)/





/OnlyMENUITEMneedcompileoption,MENUITEM_IDdoesnotneed/

/这里定义你的菜单ID,具体定义方法稍后给出/





/这里定义你的屏幕ID/







这个res文件类似与xml文件,不过你可以在其中使用一些C的预处理命令和注释。使用这种方式你不需要自己去定义res_app_firstapp.c,系统会在这个文件中搜索ID并自动生成名为mmi_rp_app_firstapp_def.h和mmi_rp_app_firstapp.c的文件,并在后者中定义对应的populate函数。至于res文件中各标签和其属性定义,请参看MTK官方文档10A_MMI_Resource_Training.pdf。







5、菜单添加



菜单由于有上下级关系,定义要相对复杂些,这里先介绍几个标签:MENU、MENUITEM和MENUITEM_ID。MENU是用来定义菜单树的标签,MENUITEM是用来定义单个菜单项的标签,MENUITEM_ID是用来在MENU树中安置菜单项的标签。下面来讨论菜单的定义。



新版本中菜单的定义方式有很多种,现介绍最常用的三种方式,其它方式请读者参看上面给出的MTK官方文档。



方法一:MENU中包含MENUITEM_ID方式定义



这种方式采用如下格式:











SUBMENU1

SUBMENU2





采用这种方式要在MENU体外申明对应MENUITEM的定义,可以放在引用MENU之前也可在其后,但MENU中MENUITEM_ID包含的内容必须是已定义的MENUITEM的ID,如果不存在系统将会将该菜单忽略。另外提一点,为了和先前的版本兼容,MTK提供了@OID:前缀,用来引用原先在c文件中定义的菜单ID,使用方法是将其放在标签对之间即可,例如:@OID:SUBMENU3。不过引用前请使用引用你ID所在文件,将其至于下。



方法二:直接将MENUITEM定义在MENU中,格式如下:





SUBMENU1

SUBMENU2





这种方式不需要在MENU体外定义对应MENUITEM,只需要放在MENU标签内同时定义MENUITEM信息即可。



方法三:嵌套MENU,格式如下:













采用这种方式使得菜单的定义一次完成,也易于理解,但是当属性较多层次较深的时候可能显得较乱。这种方式是直观的MENU树表现方式,显示了子菜单与父级菜单的对应关系。有些读者可能对MENU和MENUITEM有些迷茫,笔者认为,在大部分时候MENU和MENUITEM可以通用,你可以把他们看成一种东西(MENU)。你可以将方法三第二行替换成方法一或方法二的形式。不过如果有SUBMENU1有子菜单的时候,方法三可以直接嵌套在对应MENU体之中,而方法一或方法二则需在MENU方法体外做如下定义:







……







以上三种方法可以根据需要混合使用。最后为了完整实现菜单功能,别忘了添加对应菜单的highlight和hint函数。
献花(0)
+1
(本文系小云蔡首藏)