承德做网站公司,中山seo外包,深圳装饰公司100排名,网站建设合同书封皮全志ARM926 Melis2.0系统的开发指引⑧ 编写目的12.5. 应用程序编写12.5.1. 简单应用编写12.5.1.1. 注册应用12.5.1.2. 创建管理窗口12.5.1.3. 实现管理窗口消息处理回调函数12.5.1.4. 创建图层12.5.1.5. 创建 framewin12.5.1.6. 实现 framewin 消息处理回调函数 -. 全志相关工具… 全志ARM926 Melis2.0系统的开发指引⑧ 编写目的12.5. 应用程序编写12.5.1. 简单应用编写12.5.1.1. 注册应用12.5.1.2. 创建管理窗口12.5.1.3. 实现管理窗口消息处理回调函数12.5.1.4. 创建图层12.5.1.5. 创建 framewin12.5.1.6. 实现 framewin 消息处理回调函数 -. 全志相关工具和资源-.1 全志固件镜像修改工具 ImageModify.exe 下载-.2 全志固件USB刷机工具 PhoenixSuit 下载-.3 全志Melis2.0 用户手册.pdf下载-.4 全志melis2.0 sdk源码库下载 编写目的
本文档是全志 Melis2.0 系统的开发指引文档旨在协助开发者了解和掌握 Melis 系统快速搭建 Melis系统的开发环境将 Melis2.0 系统应用到产品开发中。
12.5. 应用程序编写
12.5.1. 简单应用编写
用户程序编写最基本的 6 个步骤注册应用、创建管理窗口 manwin 并实现回调函数、创建图层、创建framewin 并实现回调函数。下面进行介绍。
12.5.1.1. 注册应用
新方案中只有一个主应用子应用由主应用启动用户应用程序为子程序。主应用默认启动 home 子应用并由 home 子应用启动其他子应用。因此 home 子应用定义了要切换的子应用 ID。 ROOT\livedesk\beetles\applets\lib\beetles_app.h 文件中定义了子应用 ID 枚举 root_home_id_t添加项ID_HOME_TEST_APP。
typedef enum
{ID_HOME_FM 0, ID_MEDIA_START, ID_HOME_RECORDID_MEDIA_START, ID_HOME_MOVIE, ID_MEDIA_END, ID_HOME_SETTING ID_MEDIA_END, ID_HOME_TEST_APP, ID_MAX_NUM, } root_home_id_t;为方便窗口、图层创建在 ROOT\livedesk\beetles\applets\lib\beetles_app.h 加入定义窗口或图层创建时使用此名称以进行区分。
#define APP_TEST app_test12.5.1.2. 创建管理窗口
管理窗口是所有应用的入口负责接收消息。创建管理窗口时id 参数请使用注册 ID 即 APP_TEST。用户也可以添加自定义结构体用于参数传递即 create_info.attr 参数。
_s32 app_test_create(root_para_t *para)
{ __gui_manwincreate_para_t create_info;test_app_ctrl_t *test_app_ctrl NULL; __log(****************************************************************************************\n); __log(********************************** enter test app ************************************\n); __log(****************************************************************************************\n);test_app_ctrl (test_app_ctrl_t)esMEMS_Balloc(sizeof(test_app_ctrl_t));if( test_app_ctrl NULL ){ __msg(test app esMEMS_Balloc fail\n); return NULL;}eLIBs_memset(test_app_ctrl, 0, sizeof(test_app_ctrl_t));test_app_ctrl-test_app_font para-font;test_app_ctrl-root_type para-root_type; eLIBs_memset(create_info, 0, sizeof(__gui_manwincreate_para_t)); create_info.name APP_TEST; create_info.hParent para-h_parent; create_info.ManWindowProc (__pGUI_WIN_CB)esKRNL_GetCallBack((__pCBK_t)_app_test_proc); create_info.attr (void*)test_app_ctrl; create_info.id APP_TEST; create_info.hHosting NULL; return(GUI_ManWinCreate(create_info));
} 12.5.1.3. 实现管理窗口消息处理回调函数
消息处理函数为管理窗口中设置的回调函数在发生消息传递时先被调用。主要集中处理 GUI_MSG_CREATE、GUI_MSG_DESTROY、GUI_MSG_CLOSE、GUI_MSG_KEY、GUI_MSG_TOUCH 等系统消息也可以 处理用户自定义消息。
static __s32 _app_test_proc(__gui_msg_t *msg)
{ __s32 ret; switch( msg-id ){case GUI_MSG_CREATE: /* 创建子窗口*/layer htouch_layer_create(); /* 创建图层*/GUI_LyrWinSetTop(layer); /* 图层置顶*/htouch_frmwin_create(msg-h_deswin, layer); /* 创建 framewin*/return EPDK_OK;/*释放在 create 中分配的资源尽量在此回调中释放资源而不要在退出消息循环后在释放资源*/ case GUI_MSG_DESTROY: GUI_LyrWinDelete(layer); return EPDK_OK;/* 需要支持的桌面消息*/ case DSK_MSG_HOME: /* 回到主界面 */ case DSK_MSG_KILL: /* 强制杀掉该应用程序 */ret GUI_ManWinDelete(msg-h_deswin); return ret; case GUI_MSG_CLOSE:GUI_ManWinDelete(msg-h_deswin);dsk_load_app(main.app); /* 回到主界面 */return EPDK_OK; case GUI_MSG_KEY: /* 按键响应 */if( msg-dwAddData1 GUI_MSG_KEY_ESCAPE ){GUI_ManWinDelete(msg-h_deswin);dsk_load_app(main.app); return EPDK_OK;}break;default: break;}return GUI_ManWinDefaultProc(msg);/*默认处理流程*/
} 12.5.1.4. 创建图层
此图层为应用程序显示区域设置显示矩形区域位置和大小设置区域格式为 ARGB 或者其他。图层成功创建完毕后将会返回图层句柄。
static H_LYR test_app_32bpp_layer_create(RECT *LayerRect)
{H_LYR layer NULL;RECT LayerRect;FB fb {{0, 0}, /* size */{0, 0, 0}, /* buffer */{FB_TYPE_RGB, {PIXEL_COLOR_ARGB8888, 0, (__rgb_seq_t)0}}, /* fmt */};__disp_layer_para_t lstlyr {DISP_LAYER_WORK_MODE_NORMAL, /* mode */0, /* ck_mode */0, /* alpha_en */0, /* alpha_val */1, /* pipe */0xff, /* prio */{0, 0, 0, 0}, /* screen */{0, 0, 0, 0}, /* source */DISP_LAYER_OUTPUT_CHN_DE_CH1, /* channel */NULL /* fb */};__layerwincreate_para_t lyrcreate_info { APP_TEST, NULL, GUI_LYRWIN_STA_SUSPEND, GUI_LYRWIN_NORMAL};fb.size.width LayerRect-width;fb.size.height LayerRect-height;fb.fmt.fmt.rgb.pixelfmt PIXEL_COLOR_ARGB8888;lstlyr.src_win.x LayerRect-x;lstlyr.src_win.y LayerRect-y;lstlyr.src_win.width LayerRect-width;lstlyr.src_win.height LayerRect-height;lstlyr.scn_win.x LayerRect-x;lstlyr.scn_win.y LayerRect-y;lstlyr.scn_win.width LayerRect-width;lstlyr.scn_win.height LayerRect-height;lstlyr.pipe 1;lstlyr.fb fb;lyrcreate_info.lyrpara lstlyr;layer GUI_LyrWinCreate(lyrcreate_info);if( !layer ){ __err(test app layer create error !\n);}return layer;
} 12.5.1.5. 创建 framewin
Framewin 需要传入创建的图层句柄以操作图层。主要工作是绘图如创建窗口绘图、按键或触摸改变焦点绘图等。这些工作在回调中实现。另外可以传入一些用户自定义结构体数据即framewin_para.attr参数。
static H_WIN test_app_framewin_create(H_WIN h_parent, setting_general_para_t *para)
{ __gui_framewincreate_para_t framewin_para;setting_general_para_t *general_para;FB fb;GUI_LyrWinGetFB(para-layer, fb);eLIBs_memset(framewin_para, 0, sizeof(__gui_framewincreate_para_t));framewin_para.name test_app win, framewin_para.dwExStyle WS_EX_NONE;framewin_para.dwStyle WS_NONE|WS_VISIBLE;framewin_para.spCaption NULL;framewin_para.hOwner NULL;framewin_para.id GENERAL_MENU_ID;framewin_para.hHosting h_parent;framewin_para.FrameWinPro (__pGUI_WIN_CB)esKRNL_GetCallBack((__pCBK_t)htouch_frmwin_cb);framewin_para.rect.x 0;framewin_para.rect.y 0;framewin_para.rect.width fb.size.width;framewin_para.rect.height fb.size.height;framewin_para.BkColor.alpha 0;framewin_para.BkColor.red 0;framewin_para.BkColor.green 0;framewin_para.BkColor.blue 0;framewin_para.attr NULLframewin_para.hLayer para-layer;return (GUI_FrmWinCreate(framewin_para));
}12.5.1.6. 实现 framewin 消息处理回调函数
在此回调中完成图层绘制。可以在 GUI_MSG_CREATE 或 GUI_MSG_PAINT 消息中绘制应用界面图片、文字的使用和绘制请参考第 5 章中。处理按键消息 GUI_MSG_KEY 或触摸消息 GUI_MSG_TOUCH更新焦点等。应用程序能处理父窗口发送的 GUI_MSG_COMMAND 自定义命令并完成相应的绘制或其他响应此外也能发送响应结果到父窗口或其他目标窗口。
static __s32 htouch_frmwin_cb(__gui_msg_t *msg)
{ switch( msg-id ){ case GUI_MSG_CREATE: {htoutch_frmw_ctr *ctr;button_para_t *para; ctr esMEMS_Malloc(0, sizeof(htoutch_frmw_ctr));if( !ctr ){ __err( frmwin malloc fail \n); return EPDK_FALSE;}eLIBs_memset(ctr, 0, sizeof(htoutch_frmw_ctr));para (ctr-para); ctr-focus_size get_res_them((para-focus_bmp), STYLEID,ID_HELLOTOUCH_FOCUS_PIC_BMP); ctr-unfocus_size get_res_them((para-unfocus_bmp), STYLEID,ID_HELLOTOUCH_UNFOCUS_PIC_BMP);para-bmp_pos.x 0;para-bmp_pos.y 0;htouch_static_ctl_create(msg-h_deswin, para);GUI_WinSetAddData( msg-h_deswin, (__u32)ctr); return EPDK_OK;}case GUI_MSG_DESTROY: {htoutch_frmw_ctr *ctr (htoutch_frmw_ctr *)GUI_WinGetAddData(msg-h_deswin);free_res_them(ctr-para.focus_bmp, ctr-focus_size);free_res_them(ctr-para.unfocus_bmp, ctr-unfocus_size); esMEMS_Mfree(0, ctr); return EPDK_OK;}case GUI_MSG_CLOSE: {GUI_FrmWinDelete(msg-h_deswin); return EPDK_OK;}case GUI_MSG_COMMAND: { switch(LOSWORD(msg-dwAddData1)){ case ID_WIDGET_STATIC: { switch( HISWORD(msg-dwAddData1) ){case BN_CLICKED: { __gui_msg_t msgex; eLIBs_memset(msgex, 0, sizeof(__gui_msg_t)); msgex.id GUI_MSG_CLOSE; msgex.h_srcwin 0; msgex.h_deswin GUI_WinGetManWin(msg-h_deswin);GUI_SendNotifyMessage(msgex);break;}}break;}}return EPDK_OK;}default: break;}return GUI_FrmWinDefaultProc(msg);
}-. 全志相关工具和资源
-.1 全志固件镜像修改工具 ImageModify.exe 下载 下载地址 固件镜像修改工具 ImageModify.exe下载 ImageModify_20230906.rar
-.2 全志固件USB刷机工具 PhoenixSuit 下载 下载地址 USB刷机工具 PhoenixSuit下载 PhoenixSuit_CN_V1.1.1_20230906.rar
-.3 全志Melis2.0 用户手册.pdf下载
下载地址 全志Melis2.0 用户手册.pdf下载 documents_20230906_melis_v2.0.rar
-.4 全志melis2.0 sdk源码库下载
下载地址 全志melis2.0 sdk源码库下载 melis2.0-sdk-release_20230906V2.0.rar