MTK HelloWorld显示

红色为工程文件修改添加处,注意位置 


框架搭建

新建HelloWorld文件添加Inc(.h文件夹)Src(.c文件夹)放在.. /plutommi/mmi下,
mmi应用程序都是放在该文件下

Inc:

   HelloWorldResDef.h——定义资源ID定义、常量

HelloWorldType.h——定义数据类型

HelloWorldGprot.h——声明对外函数接口

HelloWorldprot.h——声明全部函数接口

Src:

HelloWorld.c——函数主程序文件

资源文件:

Res_HelloWorld.c——添加资源

资源文件放在/plutommi/Customer/CustResource/PLUTO_MMI/Res_MMI下

开关应用

开关用来是否编译

VC设置工程——>设置——>C/C++添加预处理程序定义__MMI_HELLOWORLD_ENABLED__
,这样会使整个模拟器工程重编译

Makefile设置开关在option.mak追加  COM_DEFS += __MMI_HELLOWORLD_ENABLED__

以下程序未使用开关


ID空间

每个小工程都有一个基础ID,统一定义在/plutommi/mmi/Inc/ MMIDataType.h文件


typedef enum

{

       ……

       RESOURCE_BASE_RANGE(MAIN_MENU,                     600),

       RESOURCE_BASE_RANGE(HELLOWORLD,                  100),

       /* please add new resource base above devapp */

} RESOURCE_BASE_ENUM;

 

 

/*************************************************************************
* HelloWorld
**************************************************************************/
#define HELLOWORLD_BASE                   ((U16) RESOURCE_BASE_HELLOWORLD)
#define HELLOWORLD_BASE_MAX          ((U16) RESOURCE_BASE_HELLOWORLD_END)
RESOURCE_BASE_TABLE_ITEM(HELLOWORLD)

/* please add new resource base table above this line */

 

定义屏幕、字符串、图片ID

 


自己的HelloWorldResDef.h定义资源ID

#ifndef __HELLOWORLDRESDEF__
#define __HELLOWORLDRESDEF__
#include "MMIDataType.h"
typedef enum
{
    SCR_HELLOWORLD = HELLOWORLD_BASE + 1,
}SCREENID_LIST_HELLOWORLD;//定义自己的屏幕ID资源

typedef enum
{
    STR_HELLOWORLD_HELLO = HELLOWORLD_BASE + 1,
}STRINGID_LIST_HELLOWORLD;//定义字符串资源ID
typedef enum
{
    IMG_HELLOWORLD = HELLOWORLD_BASE + 1,
}IMAGEID_LIST_HELLOWORLD;//图像资源ID

#endif

 

这些ID都是在自己的ID空间内由于种类不同都可以以HELLOWORLD_BASE
开始,就像同姓不同名不会有冲突,而菜单ID
需要全局定义,因为菜单是公用资源,用户工程的菜单ID也可是其他工程的子菜单ID
,因此菜单ID具有全局唯一性。

定义菜单ID:

打开../plutommi/mmi/Inc/ GlobalMenuItems.h,在结构体GLOBALMENUITEMSID中添加

    MENU_ID_HELLOWORLD,
/*************************************************************
* Add new menuitems definitions before here
*************************************************************/

 


添加字符串
将字符串添加到文件/plutommi/Customer/CustResource/PLUTO_MMI/ ref_list.txt

用于UE打开添加

STR_HELLOWORLD HELLOhello 20 helloworld helloworld 你好MTK 你好MTK   

第一列:字符串资源ID,这里我们只加了一个,也就是我们上面定义的“
STR_HELLOWORLD_HELLO”;

第二列:字符串资源所属模块,这个是便于设计者辨识资源归属的,资源生成程序并没用?
剑詈煤偷鼻暗哪?楹磐阌谑侗鸷凸芾恚?

第三列:该字串的最大长度,取所有语言中文本长度最长的一个

第四列:字串描述,这一列可以随意

第五列及以后各列分别对应各个不用语言的字串

中间tab键分开

添加图片:新建一个Helloworld文件将工程图片文件放进去,将文件添加到/plutommi/
Customer/Images/PLUTO240X320/image.zip中

添加菜单


将我们的资源菜单在作为工具资源菜单的一个子菜单,找到/plutommi/Customer/
CustResource/PLUTO_MMI/Res_MMI/Res_MainMenu.c

不建议修改枚举变量OrganizerMenu,对应PopulateMainMenuRes
函数位置插入,菜单的样式不同导致有不同的添加菜单ID
的函数,找不到自己的菜单位置都添加。

/* oganizer */
  ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,MAIN_MENU_PIM_MENU_ID,
ORG_ENUM_TOTAL+1,// 直接将菜单条数加1

........

MENU_ID_HELLOWORLD,

         SHOW,MOVEABLEACROSSPARENT|INSERTABLE,DISP_LIST,
MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON));


将资源ID文件添加到工程中

打开Res_HelloWorld.c  编写如下代码   

/*****************************************************************************
预编译时装载资源文件
 *****************************************************************************/

#include "MMI_features.h"

 

#include "MMIDataType.h"    /* for resource base */

#include "CustResDef.h"         /* for image/audio path */
#include "CustDataProts.h"      /* for resource generator API */
#include "GlobalMenuItems.h"    /* for menu resource */

#include "HelloWorldResDef.h"//必须包含自己的数据类型

#include "HelloWorldResDef.h"//必须包含自己的数据类型


 

void PopulateHelloWorldRes(void)
{
 // 这里是资源生成部分的代码,基本上都是些宏,后面讲到具体资源的时候我们再讲
 ADD_APPLICATION_STRING2(STR_HELLOWORLD_HELLO, "Hello, World", "HelloWorld");
    ADD_APPLICATION_IMAGE2(IMG_HELLOWORLD, CUST_IMG_PATH"
MainLCD
HelloWorldHelloWorld.bmp", "HelloWorld");
 ADD_APPLICATION_MENUITEM(
  (MENU_ID_HELLOWORLD,         /* 菜单本身ID */
  MAIN_MENU_ORGANIZER_MENUID,   /* 父菜单ID */
  0,                                                     /* 我们没有子菜单 */
  SHOW,                                        /* 是否显示 */
  SHORTCUTABLE,                     /* 菜单属性*/
  DISP_LIST, 
  STR_HELLOWORLD_HELLO,     /* 对应字符串资源 */
  IMG_HELLOWORLD));            /*对应图片资源*/
}


修改工程/plutommi/mmi/Resource/PopulateRes.c

/*********************************Helloworld**********************************/

extern void PopulateHelloWorldRes(void);

/*****************************************************************************/

在PopulateResData(void)中调用

PopulateHelloWorldRes();

设置自己的界面入口

打开HelloWorld.c编写如下代码

/*****************************************************************************
主程序函数定义
 *****************************************************************************/
#include "HistoryGprot.h"
#include "GlobalMenuItems.h"
#include "HelloWorldProt.h"

void mmi_HelloWorld_entry(void) 
{
 EntryNewScreen(SCR_HELLOWORLD, mmi_HelloWorld_exit, NULL, NULL);

 /* 关掉屏幕顶部的状态条,我们要用整个屏幕 */
 entry_full_screen();

 /* 擦除当前背景 */
 clear_screen();

 /* 移动文本输出光标 */
 gui_move_text_cursor(50, 100);

 /* 设置字体颜色 */
 gui_set_text_color(UI_COLOR_RED);

 /* 输出文本到显示缓冲, 注意是Unicode编码 */

 gui_print_text((UI_string_type)GetString(STR_HELLOWORLD_HELLO));///使用资源

 /* 刷新屏幕显示,MMI用的是双缓冲绘图方式,而且需要显式刷新 */
 gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

 /* 注册一个按键处理,右软键弹起时返回到之前被我们强制退出的模块 */
 SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
}

void mmi_HelloWorld_hilite(void)
{
   SetLeftSoftkeyFunction(mmi_HelloWorld_entry, KEY_EVENT_UP);
}

void mmi_HelloWorld_init(void)
{
   SetHiliteHandler(MENU_ID_HELLOWORLD, mmi_HelloWorld_hilite);
}

void mmi_HelloWorld_exit(void)  
{
 history currHistory;
 S16 nHistory = 0;

 currHistory.scrnID = SCR_HELLOWORLD;
 currHistory.entryFuncPtr = mmi_HelloWorld_entry;
 pfnUnicodeStrcpy( (S8*)currHistory.inputBuffer, (S8*)&nHistory);

 AddHistory(currHistory);
}

这实际上要用两个函数,由这两个函数共同完成菜单点击通知的接收和转入我们模块

我们把mmi_HelloWorld_init放入到函数InitAllApplications
中调用已完成我们模块的初始化设定,修改文件“plutommi/mmi/Framework/Tasks/
TasksSrc/MMITask.c”

#include "HelloWorldGport.h"

/*****************************************************************************
* Define                                                                     
*****************************************************************************/

/*****************************************************************************/
……

void InitAllApplications(void)

{

    mmi_HelloWorld_init();

    /*
     * Note: all applications shall be initialized before shortcut
     */

}

在HelloWorldPort.h声明

#ifndef __HELLOWORLDPORT__
#define __HELLOWORLDPORT__

void mmi_HelloWorld_entry(void);
void mmi_HelloWorld_hilite(void);
void mmi_HelloWorld_init(void);
void mmi_HelloWorld_exit(void) ;

#endif


在HelloWorldGport.h声明

#ifndef __HELLOWORLDGPORT__
#define __HELLOWORLDGPORT__
extern mmi_HelloWorld_init(void);
#endif

 

修改Makefile文件

用UE打开/plutommi/Customer/ResGenerator/Makefile文件,

在PLUTO_INC =这一项里面追加一行 -I "../../MMI/HelloWorld/Inc"
/注意,以便编译系统能顺利找到我们定义资源ID的头文件"HelloWorldDefs.h"

追加新行的时候别忘了在上一行尾部添上续行符号“/”,表示不换行,最后一行千万不要加

打开工程下make/plutommi/mmi_app的三个文件,分别按文件内容添加我们工程的路径

使用VC编译并测试模拟器,需将新工程的头文件添加引用了新工程的相应工程模块的ini
文件

打开工程/MoDIS/mmi_app/mmi_app.ini添加头文件路径/I "../../plutommi/mmi/
HelloWorld/Inc"

打开打开工程/MoDIS/mmi_framework/mmi_framework.ini添加头文件路径/I "../../
plutommi/mmi/HelloWorld/Inc"

修改模拟器/MoDIS/mmi_app/ mmi_app.dsp添加c文件路径

# Begin Source File
SOURCE=../../plutommi/mmi/HelloWorld/Src/HelloWorld.c
# End Source File


模拟器和真机共用同一套资源,所以需要使用make命令先编辑资源make SUPERMM_GEMINI
gprs resgen

编译模拟器make SUPERMM_GEMINI gprs new

编译出错可根据build/SUPERMM_GEMINI下的log文件查看

常用的make命令

 

修改应用程序文件后需要make 工程 gprs/gsm update

修改资源文件后需要 make 工程 gprs/gsm resgen

中断后继续执行 make 工程 gprs/gsm r

中断后继续执行某个模块 make 工程 gprs/gsm r mmi_app(模块名)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值