说明:本文档适用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)); |
MTK编程起步——建立新APP和资源定义
最新推荐文章于 2024-05-22 17:04:56 发布