MTK资源相关学习总结

1.资源添加
资源的添加分为三个步骤:准备原材料,添加资源ID(一般都在各个模块的XXXDef.h中定义),装载资源(一般在各个模块的res_XXX.c文件中)。
1.1字符串资源
      1.1.1添加ID
在模块的xxxDef.h中添加模块字符串ID;在GlobalDefs.h中的STR_GLOBAL_LIST枚举中添加全局字符串ID。
       1.1.2在资源文件中添加字符串
打开plutommiCustomerCustResource ef_list.txt文件,ref_list.txt文件各列描述如下:
       第一列是字符串ID,即在xxxDef.h中定义的ID。
       第二列是字符串所属的模块名(仅参考作用,可任意填写)。
       第三列是本字符串的最大长度(去所有语言文本中的最大长度)。
       第四列是字符串的描述(仅参考作用,可任意填写)。
       从第五列开始是各种语言版本对应的字串。
       1.1.3装载资源
       模块字符串:在模块的res_xxx.c文件的PopulateXXXRes()函数中,使用宏ADD_APPLICATION_STRING或ADD_APPLICATION_STRING2装载字串。
       全局字符串:在PopulateRes.c文件的PopulateGlobalData函数中,装载字符串。
 
       ADD_APPLICATION_STRING第一个参数为字串ID,第二个参数是字符串的默认显示值。
       ADD_APPLICATION_STRING2前两个参数与ADD_APPLICATION_STRING一致,第三个参数为字符串的描述,可忽略。
1.1.4编译
在dos下输入:make 项目名 gprs resgen 编译资源文件,然后在模拟器中编译运行。
1.2图片资源
       1.2.1添加图片ID
在模块的XXXDef.h中添加模块图片ID;在GlobalDefs.h中的IMG_GLOBAL_LIST枚举中添加全局图片ID。
       1.2.2将图片资源添加到资源包中
在plutommiCustomerImages目录下根据LCD尺寸和主副屏找到相应的图片资源包,比如PLUTO240X320,此目录下有一个MainLCD目录和image.zip文件,如果资源添加完成后调用plutommiCustomer下的ResGenerator.bat编译资源文件,则只需在MainLCD文件夹下对应的目录中添加图片即可;如果在DOS中使用make 项目名 gprs resgen的方式编译资源文件,则必须在image.zip中添加需要添加的图片。
       1.2.3资源加载
       模块图片:在模块的res_XXX.c文件的PopulateXXXRes()函数中,使用宏ADD_APPLICATION_IMAGE装载图片资源。
       全局图片:在PopulateRes.c文件的PopulateGlobalData函数中,装载图片资源。
 
       ADD_APPLICATION_IMAGE第一个参数为图片ID,第二个参数为图片存放路径,例如CUST_IMG_PATH"[url=file://\\MainLCD\\Mainmenu\\mainmenu_flyfot\\FTS_mainmenu_BG01.bmp]\\MainLCD\\Mainmenu\\mainmenu_flyfot\\FTS_mainmenu_BG01.bmp[/url]"
宏CUST_IMG_PATH即为"..\\..\\Customer\\Images\\PLUTO240X320"
 
 
 
 
 
 
 
 
1.3菜单资源
       1.3.1在GlobalMenuItems.h的GLOBALMENUITEMSID枚举中添加菜单ID
必须添加到MAX_MENU_ITEMS_VALUE之前,例如
       enum GLOBALMENUITEMSID
{
IDLE_SCREEN_MENU_ID = 1,
……
……
    MENU_ID_MYAPP_DEMO,
MAX_MENU_ITEMS_VALUE,
    MENU_ITEM_END
};
 
      1.3.2将菜单添加到菜单列表中。
例如:
       ADD_APPLICATION_MENUITEM((MESSAGES_MENU_SMS_MENUID,
                                                               MAIN_MENU_MESSAGES_MENUID,                                                                             NUM_MESSAGES_MAIN_MENU,
                                                               MESSAGES_MENU_WMESSAGE_MENU_ID,
                                                               MESSAGES_MENU_INBOX_MENUID,
                                                        MESSAGES_MENU_OUTBOX_MENUID,
                                                               MENU_ID_MYAPP_DEMO,                     
SHOW,
MOVEABLEWITHINPARENT|INSERTABLE,
DISP_LIST,STR_SMS_MENUENTRY, IMG_MESSAGE_SMS_MENUENTRY));
       即在菜单项MESSAGES_MENU_SMS_MENUID的下一级菜单的最后增加了菜单项MENU_ID_MYAPP_DEMO。
 
       添加时要注意NUM_MESSAGES_MAIN_MENU值应相应变化。
 
       宏ADD_APPLICATION_MENUITEM用来装载菜单资源,其参数如下:
              第1个参数:新加菜单项ID
              第2个参数:新菜单项的上一级菜单ID,即ParentID。
              第3个参数:此菜单的下一级菜单项总个数(N)。
              第4—4+N个参数:分别为每一个子菜单项ID。
              第4+N+1个参数:菜单项显示属性,一般为show。
              第4+N+2个参数:菜单项转移属性,有以下几种:
#define NONMOVEABLE 0x00
#define MOVEABLEWITHINPARENT 0x01
#define MOVEABLEACROSSPARENT 0x02
#define INSERTABLE 0x10
#define SHORTCUTABLE 0x80
一般为MOVEABLEWITHINPARENT|INSERTABLE
              第4+N+3个参数:菜单项下级菜单的显示风格,有以下几种
                                          typedef enum
{
    DEFAULT,    /* Cannot be changed to list,matrix,circular */
    DISP_LIST,
    DISP_MATRIX,
    DISP_CIRCULAR_3D,
    DISP_PAGE,
    DISP_ANI_BG_LIST,
    DISP_MATRIX_EMS,
    DISP_ROTATE,
    DISP_MOTION,
    DISP_LIST_MATRIX,
    DISP_MATRIX_PAGE,
    DISP_FIXED_GRID
} DISPATTRIBUTE;
       第4+N+4个参数:此菜单项的显示文本字符串
       第4+N+5个参数:此菜单项的显示小图标
       
菜单的高亮时按下OK键对应的处理函数用宏
ADD_APPLICATION_MENUITEM_HILITE_HANDLER加载,它有2个参数,分别为:
第1个参数:菜单ID
第2个参数:对应的函数
 
1.4声音
从目前了解的代码来看,声音资源和图片资源类似,资源包在plutommiCustomerAudio下,加载资源的宏为ADD_APPLICATION_AUDIO2。
 
资源添加完成后运行plutommiCustomer ResGenerator.bat或在命令行中运行make 项目名 gprs resgen对资源编译。
 
 
 
 
 
2.热区的注册和使用
触屏开关 __MMI_TOUCH_SCREEN__
2.1触笔在非手写状态下的事件有:
       typedef enum
{
    MMI_PEN_EVENT_DOWN,
    MMI_PEN_EVENT_UP,
    MMI_PEN_EVENT_LONG_TAP,
    MMI_PEN_EVENT_REPEAT,
    MMI_PEN_EVENT_MOVE,
    MMI_PEN_EVENT_ABORT,
    MMI_PEN_EVENT_DOUBLE_CLICK,
 
    MMI_PEN_EVENT_NONE,
    MMI_PEN_EVENT_TYPE_MAX = MMI_PEN_EVENT_NONE
} mmi_pen_event_type_enum;
热区的处理通过注册各事件的handler来完成。在事件的handler中根据当前坐标判断触笔是在哪个热区中,然后调用相应的函数处理。
 
2.2定义触笔事件的handler
如:
/* 触笔按下handler*/
MMI_BOOL main_menu_pen_down_handler (mmi_pen_point_struct point)
{
       /* 判断触笔当前位置(point)在屏幕热区的区域 */
       
       /* 调用相应的函数处理 */
}
MMI_BOOL main_menu_pen_up_handler (mmi_pen_point_struct point)
MMI_BOOL main_menu_pen_move_handler (mmi_pen_point_struct point)
MMI_BOOL main_menu_pen_abort_handler (mmi_pen_point_struct point)
MMI_BOOL main_menu_pen_repeat_handler (mmi_pen_point_struct point)
 
2.3注册热区的handler
       对于使用wgui屏幕模板画的窗口,使用函数
       wgui_register_category_screen_control_area_pen_handlers来注册热区
       它有2个参数,分别为:
       第1个参数为:mmi_pen_handler pen_fp,handler。
       第2个参数为:mmi_pen_event_type_enum event_type,触笔事件。
       如:
wgui_register_category_screen_control_area_pen_handlers(
main_menu_pen_down_handler, MMI_PEN_EVENT_DOWN);
wgui_register_category_screen_control_area_pen_handlers(
main_menu_pen_up_handler, MMI_PEN_EVENT_UP);
 
       对于纯自画的窗口,使用以下函数注册热区:
mmi_pen_register_down_handler(main_menu_pen_down_handler);
mmi_pen_register_up_handler(main_menu_pen_up_handler);
mmi_pen_register_move_handler(main_menu_pen_move_handler);
mmi_pen_register_abort_handler(main_menu_pen_abort_handler);
mmi_pen_register_repeat_handler(main_menu_pen_repeat_handler);
3.主菜单
3.1主菜单入口函数
主菜单入口函数为goto_main_menu(),主要代码如下
void goto_main_menu(void)
{
       // 1.entry main menu
EntryNewScreen(MAIN_MENU_SCREENID, exit_main_menu, NULL,
MMI_FULL_SCREEN);
       
       // 2.获取菜单项数量,图片ID,字符串ID,显示属性等
n_items = GetNumOfChild_Ext(IDLE_SCREEN_MENU_ID);
GetSequenceStringIds_Ext(IDLE_SCREEN_MENU_ID, mm_stringIDs);
GetSequenceImageIds_Ext(IDLE_SCREEN_MENU_ID, mm_iconIDs);
SetParentHandler(IDLE_SCREEN_MENU_ID);
attributes = GetDispAttributeOfItem(IDLE_SCREEN_MENU_ID);
……
 
// 3.注册高亮处理,即根据当前高亮项查找对应的hilite函数
RegisterHighlightHandler(main_menu_custom_highlight_handler);
 
// 4.调用wgui接口ShowCategory14Screen画主菜单
ShowCategory14Screen(…);
 
// 5.注册快捷键(数字键等)处理
register_menu_shortcut_selected(main_menu_shortcut_executer);
 
// 6.设置右软键处理
SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
}
 
3.2主菜单修改为18宫格
 
3.2.1方案一
参照原主菜单的思路,新增菜单ID:IDLE_SCREEN_MENU_ID2,作为主菜单第二页的上一级菜单ID。新增函数main_menu_redraw如下:
void main_menu_redraw (void)
{
       // 2.根据当前页号分别用IDLE_SCREEN_MENU_ID和IDLE_SCREEN_MENU_ID2获
// 取菜单项数量,图片ID,字符串ID,显示属性等
 
// 3.根据当前页号分别注册IDLE_SCREEN_MENU_ID和IDLE_SCREEN_MENU_ID2
// 的高亮处理,即根据当前高亮项查找对应的hilite函数
 
// 4.调用wgui接口ShowCategory14Screen画主菜单
ShowCategory14Screen(…);
 
// 5. 根据当前页号分别注册IDLE_SCREEN_MENU_ID和IDLE_SCREEN_MENU_ID2
// 的快捷键(数字键等)处理
register_menu_shortcut_selected(main_menu_shortcut_executer);
 
// 6.设置右软键处理
SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
}
 
void goto_main_menu(void)
{
       // 1.entry main menu
EntryNewScreen(MAIN_MENU_SCREENID, exit_main_menu, NULL,
MMI_FULL_SCREEN);
       
       main_menu_redraw();
}
此方式不需要考虑各种冲突,但是实现起来比较复杂,需要修改wgui的接口等
3.2.2方案二
       不使用wgui的模板,创建一个纯自画窗口。添加函数main_menu_redraw如下:
       void main_menu_redraw(void)
{
       // 根据当前页号分别画背景
       gdi_image_draw_id(0, 0, MAIN_MENU_BACKGROUND_01_IMAG);
 
       // 显示annun区
show_status_icon_bar(0);
    show_status_icons();
 
       // 初始化9个热区坐标
 
       // 注册热区
       mmi_pen_register_up_handler(main_menu_pen_up_handler);
}
 
 
// 触笔抬起处理函数
MMI_BOOL main_menu_pen_up_handler(mmi_pen_point_struct point)
{
    // 根据point查找当前点击项
       // 调用对应的入口函数
}
 
void goto_main_menu(void)
{
       // 1.entry main menu
EntryNewScreen(MAIN_MENU_SCREENID, exit_main_menu, NULL,
MMI_FULL_SCREEN);
       
       main_menu_redraw();
}
 
此方式实现比较简单,但是冲突问题,显示效果问题等都需要考虑,另外,画了全屏的背景后,调用show_status_icons();这个接口,annun区的背景成了白色。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值