展讯平台 MMI学习笔记

  • 格式:doc
  • 大小:37.50 KB
  • 文档页数:9

展讯平台 MMI学习笔记

MMI_STRNTOWSTR使ascii转wstr

窗口:

不仅显示内容,而且处理内部消息和发送给该窗口的外部消息。

一个应用程序是由一个或多个窗口构成的。

窗口创建过程(hello sprd):

(1)创建窗口TABLE()

宏 WINDOW_TABLE定义了窗口数据信息表,在window_parse.h

WINDOW_TABLE(MMI_HELLO_SPRD_WIN_TAB)=

{

WIN_ID(MMI_HELLO_SPRD_WIN_ID),//窗口ID

WIN_FUNC((uint32)HandleHelloSprdWinMsg), //处理函数

WIN_TITLE(TXT_HELLO_TITLE),//窗口标题

WIN_SOFTKEY(STXT_OK, TXT_NULL, STXT_RETURN),

END_WIN

};

(2)注册窗口ID

暂放于MMI_APP/COMMON/H/mmi_id.def中

WIN_ID_DEF(MMI_HELLO_SPRD_WIN_ID,"MMI_HELLO_SPRD_WIN_ID")

(3)MMK位于mmk_app.h中

在idle窗口的处理函数里面加case_msg_app_ok里加一句:

MMK_CreateWin((uint32*)MMI_HELLO_SPRD_WIN_TAB,PNULL);

(4)写窗口处理函数,否则是一个空窗口 不会显示。(窗口回调函数)

首先要申明,LOCAL MMI_RESULT_E HandleHelloSprdWinMsg(

MMI_WIN_ID_T win_id,

MMI_MESSAGE_ID_E msg_id, DPARAM param

);

然后函数实现:窗口的处理函数其实就是一个大的CASE语句,主要处理来自于系统的内部和外部消息。

LOCAL MMI_RESULT_E HandleHelloSprdWinMsg(

MMI_WIN_ID_T win_id,

MMI_MESSAGE_ID_E msg_id,

DPARAM param

)

{ MMI_RESULT_E recode=MMI_RESULT_TRUE;

switch(msg_id)

{

case MSG_OPEN_WINDOW: //打开窗口的消息

break;

case MSG_FULL_PAINT: //刷新窗口消息

{

GUI_LCD_DEV_INFO

lcd_dev_info ={GUI_MAIN_LCD_ID,GUI_BLOCK_MAIN};

GUI_POINT_T start_point={1,1};

GUI_RECT_T rect={0,0,239,319}; //全屏区域

MMI_STRING_T text_str={0};

MMIRES_GetText(TXT_HELLO_SPRD,win_id,&text_str);

GUI_FillRect(&lcd_dev_info,rect,MMI_WHITE_COLOR); start_point.x=1;

start_point.y=30;

LCD_DisplayString(&lcd_dev_info,start_point,text_str.wstr_ptr,text_str.wstr_len,0,MMI_BLACK_COLOR,SONG_FONT_16,0);//显示字符串接口

start_point.x=1;

start_point.y=50;

GUIRES_DisplayImg(&start_point,PNULL,PNULL,win_id,HELLO_SPRD_TEST,&lcd_dev_info);

HelloDrawLine();

HelloDrawRect();

HelloFillRect();

}

break;

case MSG_APP_OK:

MMK_CreateWin((uint32*)MMI_TEST_MENU_WIN_TAB,PNULL);

break;

case MSG_GET_FOCUS: //窗口获得焦点

break;

case MSG_LOSE_FOCUS: //窗口失去焦点

break;

case MSG_APP_CANCEL: //////2010-05-10

MMK_CloseWin(MMI_HELLO_SPRD_WIN_ID);

break;

case MSG_CLOSE_WINDOW: //关闭窗口消息

break;

default:

recode=MMI_RESULT_FALSE;

break;

}

return recode;

}

总结一下一个窗口的创建步骤:

(1)创建窗口TABLE

(2) 注册窗口ID

(3)调用MMK_createWin创建窗口

(4)实现窗口处理函数

关于部分CASE语句的消息定义:

MSG_OPEN_WINDOW:打开窗口

MSG_GET_FOCUS:窗口获得焦点

MSG_FULL_PAINT:窗口刷新

MSG_LOSE_FOCUS:窗口失去焦点

MSG_CLOSE_WINDOW:关闭窗口

MSG_APP_CANCEL:右键消息(取消或返回)

资源(静态资源和动态资源) 包括:字符串、图片、菜单、字库、声音等。

资源工程定义文件:mmi_res_prj_def.h

模块资源ID定义文件:例如common模块common_mdu_def.h文件

添加字串资源:

(1)在资源文件夹,打开STR_TABLE.xls

文件末尾处添加(ID,MAXLENGTH,ENGLISH)

(2)打开common_mdu_def.h

添加res_add_string(TXT_HELLO_SPRD,"HELLO SPRD")

字符串资源的使用:

{

GUI_POINT_T start_point={1,1,};

GUI_RECT_T rect={0,0,239,319};

MMI_STRING_T text_str={0};//定义字符串资源信息

MMIRES_GetText(TXT_HELLO_SPRD,win_id,&text_str);//获取字符串资源信息

GUI_FILLrect(&lcd_dev_info,rect,MMI_WHITE_COLOR);

LCD_DisplayString(&lcd_dev_info, start_point,text_str.wstr_ptr,

text_str.wstr_len,0,MMI_BLACK_COLOR,SONG_FONT_16,0);

}

添加图片资源:

(1)将图片保存于相应模块的MS_Code\MS_MMI\source\resource\mmi_res_240x320\common\MMI_RES_DEFAULT\IMAG\Common

(2)在common_mdu_def.h中添加(注意路径)

RES_ADD_IMG(HELLO_SPRD_TEST,"\\MMI_RES_##\\IMAG\\Common\\HELLO_SPRD_TEST.BMP",IMG_CMP_BMP_16_565_RAW,0)

(3){

start_point.x=1;

start_point.y=50;

GUIRES_DisplayImg(&start_point,PNULL,PNULL,win_id,HELLO_SPRD_TEST,&lcd_dev_info);

}

添加菜单资源:

(1)mmi_menutable.c

//添加于5月17

#define MENU_DEF(_TABLEID, _ITEMPTR, _STYLE, _TITLESTR, _TITLE_ICON,

_TITLE_NUMICON, _TITLE_BACKGROUND, \

_ITEMCOUNT) \

_ITEMPTR, _STYLE, _TITLESTR, _TITLE_ICON, _TITLE_NUMICON,

_TITLE_BACKGROUND, _ITEMCOUNT,

const GUIMENU_ITEM_T menu_hello_table[]=

{

{ID_HELLO_TEST1,TIP_NULL,{STXT_OK,TXT_NULL,STXT_RETURN},TXT_HELLO_TEST1,IMAGE_SECMENU_ICON_SET_CALL,0,0,0},

{ID_HELLO_TEST2,TIP_NULL,{STXT_OK,TXT_NULL,STXT_RETURN},TXT_HELLO_TEST2,IMAGE_SECMENU_ICON_SET_CALL,0,0,0},

{ID_HELLO_TEST3,TIP_NULL,{STXT_OK,TXT_NULL,STXT_RETURN},TXT_HELLO_TEST2,IMAGE_SECMENU_ICON_SET_CALL,0,0,0},

(2)mmi_menutable.def中添加菜单组ID定义