




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、创建窗口的步骤:第一步:创建窗口数据表WINDOW_TABLE( MMIPB_MAIN_WIN_TAB ) = WIN_FUNC(uint32)HandleMainWinMsg), WIN_ID( MMIPB_MAIN_WIN_ID ), CREATE_TAB_CTRL(GUI_TAB_ITEM_LEFT, GUITAB_STATE_NONEED_SCROLL|GUITAB_STATE_SINGLE_LINE, MMIPB_SEARCH_LIST_TAB_CTRL_ID), END_WIN;第二步:实现窗口处理函数:LOCAL MMI_RESULT_E HandleMainWinMsg( MM
2、I_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_GET_FOCUS: break; case MSG_LOSE_FOCUS: break; case MSG_FULL_PAINT: break; case MSG_CLOSE_WINDOW: break; default: break; return recode;第三步:调用MMK_Creat
3、eWin创建窗口5,在MS_MMI/source/mmi_app/app目录下添加新模块:修改app.mk文件中的宏:MSRCPATH、MINCPATH、SOURCES6,字库资源放在目录MS_MMIsourceresourcemmi_res_320x480_universeFONT中7,铃声资源放在目录MS_MMIsourceresourcemmi_res_320x480_universeRING中8,颜色资源表在目录MS_MMIsourceresourcemmi_res_320x480_universecolor_table.xls9,开机log在MS_MMIsourceresourcem
4、mi_res_320x480_universelogo.bmp10,mmi_res_prj_def.h文件中:定义语言信息、定义全局信息、定义皮肤信息、定义模块信息、定义铃声信息、定义字库信息11,在每个模块中,基本上都有一个自己模块的资源ID 头文件,例如common模块的common_mdu_def.h头文件12,mmi_theme.c和mmitheme_xx.c中实现了几乎所有控件的风格。13,HandlePBPsMsg函数在文件mmipb_export.c中,包括电话簿中的消息处win.def 定义窗口tabmmimain.c app主函数,app初始化 APP_Taskmianmen
5、u_win.c 主窗口主函数mmk_ext_app.h app声明处mmk_regapp.def app注册要处理的ps消息mmk_window.c:MMK_RunWinProc 调到窗口消息处理处HandleMSGKbd 按键消息mmk_kbd.c 按键处理mmk_tp.c 触屏处理guictrlmodule.c ctrl模块gif、jpg、png等文件的解码:mmi 调用 DecodeImageFile后,通过函数MMIAPIPIC_StartDecodeGif 开始启动解码task解码主函数 PicDecOrEncHandleTask 开始调用gif 解码, 每一次解一帧数据,通过MMI
6、THEME_NotifyDecodeGifOneFrame传递消息给mmi taskmmi task 接收消息后传递给专门的控件处理函数AnimCtrlHandleMsg,再调用HandleAnimGetDataCnf给ui层显示,直到gif显示结束解码完成后由负责解码的 task 调用 DecOrEncEnd 传递给mmi消息 调用 MMIAPIPIC_DestroyDecOrEncTask 结束自身 AnimCtrlHandleMsg 最后调用 HandleDataCnfForGifDecEnd 结束解码当只需要显示一帧或关闭窗口时 mmi也可主动调用 MMIAPIPIC_DestroyD
7、ecOrEncTask 结束解码gif 调用 GIFDECODEAPP_Decode 此函数会一直解码完数据后退出,解码的数据放在input参数中CS_IMM_EventHandle keypad获取候选字函数 CSFPYCORE_EventHandle keybroad获取候选字函数 Recognize 屏幕笔画识别函数mmi_menutable.c 菜单结构文件mainmenu_win.c 窗口及窗口处理函数窗口和菜单对应关系,以tool为例:mainmenu_win.c 中定义窗口:WINDOW_TABLE(MAINMENU_ICON_TOOLS_WIN_TAB) = /CLEAR_LC
8、D, /WIN_PRIO( WIN_ONE_LEVEL ), WIN_FUNC(uint32)HandleMainSecondMenuWinMsg), WIN_ID(MAIN_MAINMENU_TOOLS_WIN_ID),WIN_TITLE(TXT_NULL), WIN_STATUSBAR, CREATE_MENU_CTRL(0,MMI_CLIENT_RECT_TOP+MMI_STATUSBAR_HEIGHT,MMI_MAINSCREEN_RIGHT_MAX_PIXEL,MMI_CLIENT_RECT_BOTTOM, MENU_ICON_TOOLS, MAINMENUWIN_SECOND_ME
9、NU_CTRL_ID),WIN_SOFTKEY(STXT_OK, TXT_NULL, STXT_RETURN), WIN_TIPS, END_WIN;通过其中的groupid MENU_ICON_TOOLS 找到mmi_menutable.def 中的MENU_DEF( MENU_ICON_TOOLS, menu_icon_tools, GUIMENU_STYLE_THIRD, TXT_MAINMENU_ICON_TOOLS, IMAGE_COMMON_TITLE_BAR, IMAGE_NULL, IMAGE_NULL, GUIMENU_ITEM_NUM(menu_icon_tools)在通过
10、其中的itemptr menu_icon_tools 找到mmi_menutable.c 中的const GUIMENU_ITEM_T menu_icon_tools = .添加菜单,字符串及图片:以tools中 alarm 为例:在 menu_icon_tools 数组中加入: ID_TOOLS_ALARM, TIP_NULL,STXT_OK,TXT_NULL,STXT_RETURN,TXT_TOOLS_ALARM, IMAGE_SECMENU_ICON_TOOL_ALARM, 0,0,MENU_NULL,在mmi_appcommonh下文件 common_mdu_def.h中添加字符串ID
11、 RES_ADD_STRING(TXT_TOOLS_ALARM,"Alarm")添加图片ID RES_ADD_IMG_NULL(IMAGE_SECMENU_ICON_TOOL_ALARM) 或 RES_ADD_IMG(IMAGE_SECMENU_ICON_TOOL_ALARM,"MMI_RES_#IMAGSecondmenu_iconIMAGE_SECMENU_ICON_TOOL_ALARM.png",IMG_CMP_PNG_ARGB,0)具体目录指:MS_MMIsourceresourcemmi_res_240x320commonMMI_RES_DEF
12、AULTIMAGSecondmenu_icon如果添加动画则用 RES_ADD_ANIM接着在MS_MMIsourceresourcemmi_res_240x320str_table.xls中添加字符串实体 TXT_TOOLS_ALARM30Alarm闹钟鬧鐘MMI_STRNTOWSTR使ascii转wstr窗口:不仅显示内容,而且处理内部消息和发送给该窗口的外部消息。一个应用程序是由一个或多个窗口构成的。窗口创建过程(hello sprd):(1)创建窗口TABLE()宏 WINDOW_TABLE定义了窗口数据信息表,在window_parse.hWINDOW_TABLE(MMI_HELLO
13、_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位于m
14、mk_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_RESUL
15、T_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; G
16、UI_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_COL
17、OR,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_
18、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)实现窗口处理函数关
19、于部分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
20、) (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_Dis
21、playString(&lcd_dev_info, start_point,text_str.wstr_ptr,text_str.wstr_len,0,MMI_BLACK_COLOR,SONG_FONT_16,0);添加图片资源:(1)将图片保存于相应模块的MS_CodeMS_MMIsourceresourcemmi_res_240x320commonMMI_RES_DEFAULTIMAGCommon(2)在common_mdu_def.h中添加(注意路径)RES_ADD_IMG(HELLO_SPRD_TEST,"MMI_RES_#IMAGCommonHELLO_SPRD_T
22、EST.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_BACKGROU
23、ND, _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,TX
24、T_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定义MENU_DEF( MENU_HELLO_TABLE, menu_hello_table, GUIMENU_STYLE_THIRD, TXT_NULL,IMAGE_COMMON_TITLE_BAR, IMAGE_NULL,IMAGE_NU
25、LL, GUIMENU_ITEM_NUM(menu_hello_table) (3)加入菜单IDtypedef enum/菜单IDID_HELLO_TEST1,ID_HELLO_TEST2,ID_HELLO_TEST3,ID_HELLO_TOTALMMI_HELLO_MENU_ID_E;(4) 在mainapp.c里面加入WINDOW_TABLE(MMI_TEST_MENU_WIN_TAB)=WIN_ID(MMI_TEST_MENU_WIN_ID),WIN_FUNC(uint32)HandleTestMenuWinMsg),WIN_TITLE(TXT_NULL),CREATE_MENU_CTR
26、L(0,MMI_CLIENT_RECT_TOP,MMI_MAINSCREEN_RIGHT_MAX_PIXEL,MMI_CLIENT_RECT_BOTTOM,MENU_HELLO_TABLE,MMI_TEST_MENU_CTRL_ID),WIN_SOFTKEY(STXT_OK,TXT_NULL,STXT_RETURN),END_WIN;(1)查看菜单项数据定义:const GUIMENU_ITEM_T menu_settings =有助于了解菜单的含义。在mmi_menutable.c文件内 菜单组数据: 首先定义该文件中MENU_DEF宏中取那些数据: #define MENU_DEF(.).
27、 const GUIMENU_GROUP_T menu_table= /这个如果是另增模块就需要, 否则加在别的模块的话会引起重定义错误。 (2)定义菜单组ID和菜单组数据 MENU_DEF(.)./定义菜单数据信息宏 定义菜单数据信息(数组),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,; (3)定义菜单项ID
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村农作物购销合同范本
- 助贷系统出售合同范例
- 极端换热条件下边界条件非傅里叶效应的数值研究
- 城乡融合背景下乡村武术发展的困囿与突围研究
- 单独招生(机电类)模考试题含参考答案
- 2025年安徽中考物理一轮教材复习课件-第一部分 第二章 声现象
- 融资意向金合同范本
- 农田改造项目合同范本
- 施工挖机合同范本
- 知识产权保护在农业科技的创新推动
- GB/T 2831-2009光学零件的面形偏差
- 广东省佛山市《综合基础知识》事业单位国考真题
- 02 第2章 城市与城市化-城市管理学
- 六年级上册英语教案-Culture 2 Going Green 第二课时 广东开心英语
- 警察叔叔是怎样破案的演示文稿课件
- 2019石景山初三一模语文试题及答案
- 外固定架课件
- 尿液有形成分形态学检查与临床意义课件
- 09式 新擒敌拳 教学教案 教学法 图解
- CAD术语对照表
- 学术论文的写作与规范课件
评论
0/150
提交评论