收藏 分销(赏)

展讯平台窗口创建流程.docx

上传人:xrp****65 文档编号:7220960 上传时间:2024-12-28 格式:DOCX 页数:6 大小:103.75KB 下载积分:10 金币
下载 相关 举报
展讯平台窗口创建流程.docx_第1页
第1页 / 共6页
展讯平台窗口创建流程.docx_第2页
第2页 / 共6页


点击查看更多>>
资源描述
窗口创建流程简介 窗口在展讯平台中是一个至关重要的概念,与Windows操作系统相类似的,窗口在展讯平台中就是最终呈现给用户的一个应用程序。在这里,我们可以把窗口看作一个应用程序,因为,它不但能够显示内容给用户,而且更为重要的是,窗口能够处理系统中所有的内部消息及发送到该窗口的外部消息。 一个应用程序是由一个或多个窗口构成的,例如Idle窗口只包含一个窗口,而短消息模块包含多个窗口。应用程序都是通过窗口显示给用户,并最终实现人机交互。 下面我们来看下展讯平台的窗口创建流程。 图1 动态窗口创建流程 图2 静态窗口创建流程 窗口分为静态窗口和动态窗口,静态窗口会在宏WINDOW_TABLE中先定义好窗口的属性,而动态窗口是在实现时动态创建窗口属性。具体如何选择,根据应用的需要来选择。 展讯平台为用户提供了创建静态窗口和动态窗口的接口,分别为函数MMK_CreateWin和函数MMK_CreateWindow,具体如何创建窗口,可以参考展讯文档,这里主要讲述调用创建窗口接口后的流程。 通过上面两个流程图,我们可以看到静态窗口和动态窗口的创建会调用几个相同的函数MMK_AddTreeNode、TreeNodeNew和MMK_WindowTreeNodeConstruct。这三个函数是为了创建窗口节点,窗口是通过树来管理的,如下图: 图3 窗口管理 展讯平台里退出当前窗口时,系统会执行注销当前窗口的操作,用树管理窗口的好处就是这时候系统会自动进入父窗口,从而达到用户希望的效果。 创建完窗口节点后,会创建窗口的一些基本属性,如背景、显示区域等,这个时候我们看不到其它的属性,如状态栏、菜单、编辑框等等。 静态窗口和动态窗口在这之后就会出现一些区别,静态窗口会在后面继续创建窗口其它的属性,这些属性在先前宏WINDOW_TABLE中已经定义好的,比如状态栏、标题栏、菜单栏、soft控件等。这些属性的创建是在以下函数中进行的。 PUBLIC BOOLEAN MMK_ParseWinTab( MMI_HANDLE_T win_handle, uint32 *win_tab_ptr ) { … value_ptr = win_tab_ptr; while ((END_WIN != *value_ptr) && (CAF_END_WIN != *value_ptr)) { ins = *value_ptr; value_ptr++; if ((FIRST_PARSE <= ins) && (END_WIN > ins)) { result = MMKParseFunc[ins - FIRST_PARSE](win_handle,&value_ptr);//调用函数表中的函数来创建窗口的其它属性 } else if ((CHILD_CTRL_FIRST <= ins) && (LAST_CHILD > ins)) { result = GUIFORM_ParseChild((ins - CHILD_CTRL_FIRST),win_handle,&value_ptr); } else if ((CAF_PARSEWIN_FIRST <= ins) && (CAF_PARSEWIN_MAX > ins)) { result = CAFParseFunc[ins - CAF_PARSEWIN_FIRST](win_handle,&value_ptr); } else { SCI_ASSERT(FALSE); /*assert verified*/ } if (!result) { break; } } return (result); } LOCAL const PARSE_FUNC MMKParseFunc[] = { SetWinPrio, SetWinFunc, SetWinId, CreateMenuCtrl, CreatePopmenuCtrl, CreateMsgBoxCtrl, CreatePrgBoxCtrl, CreateTextCtrl, CreateListBoxCtrl, CreateEditTextCtrl, CreateEditPhonenumCtrl, CreateEditDigitalCtrl, CreateEditPasswordCtrl, CreateEditListCtrl, CreateEditDateCtrl, CreateEditTimeCtrl, CreateEditIPCtrl, CreateAnimCtrl, SetWinBackgroundID, CreateLabelCtrl, CreateButtonCtrl, SetWinStyle, CreateDropDownListCtrl, CreateIconListCtrl, CreateRichTextCtrl, CreateTabCtrl, CreateStatusBarCtrl, CreateSoftkeyCtrl, CreateTitleCtrl, SetWinMoveStyle, CreateTipsCtrl, CreateSettingList, CreateFormCtrl, CreateOwnDrawCtrl, CreateToolbarCtrl, SetWinSupportAngle, }; 而动态窗口在创建完基本的属性后,需要手动创建窗口的其它属性。如以下代码: LOCAL void OpenFileListMainWin(BOOLEAN is_internal_call) { if(!MMK_IsOpenWin(MMIFMM_OPEN_FILE_BYLAYER_WIN_ID)) { MMI_WINDOW_CREATE_T win_create = {0}; MMI_HANDLE_T win_handle = 0; MMI_CONTROL_CREATE_T create = {0}; GUILIST_INIT_DATA_T init_data = {0}; win_create.applet_handle = MMK_GetFirstAppletHandle(); win_create.win_id = MMIFMM_OPEN_FILE_BYLAYER_WIN_ID; win_create.win_priority = WIN_ONE_LEVEL; win_create.add_data_ptr = (ADD_DATA)(is_internal_call); win_create.window_style = 0; win_create.window_move_style = MOVE_BY_SETTING; if (NULL == s_handle_func) { win_create.func = MMIFMM_HandleOpenFileByLayerWin; } else { win_create.func = s_handle_func; } win_handle = MMK_CreateWindow( &win_create );//创建动态窗口 //create softkey if (0 != win_handle) { GUISOFTKEY_INIT_DATA_T softkey_data = {0}; MMI_CONTROL_CREATE_T softkey_create = {0}; MMI_CTRL_ID_T softkey_ctrl_id = 0; softkey_data.leftsoft_id = STXT_OK; softkey_data.midsoft_id = TXT_NULL; softkey_data.rightsoft_id = STXT_RETURN; softkey_ctrl_id = MMITHEME_GetSoftkeyCtrlId(); softkey_create.ctrl_id = softkey_ctrl_id; softkey_create.guid = SPRD_GUI_SOFTKEY_ID; softkey_create.parent_win_handle = win_handle; softkey_create.init_data_ptr = &softkey_data; MMK_CreateControl( &softkey_create );//创建soft控件 MMK_SetWinSoftkeyCtrlId(win_handle, softkey_ctrl_id); } //create title if (0 != win_handle) { GUIWIN_CreateTitleDyna(win_handle, TXT_FMM_FILE_LIST);//创建标题栏 } //create list if( 0 != win_handle ) { init_data.both_rect = MMITHEME_GetWinClientBothRect(win_handle); //init_data.both_rect.h_rect = init_data.both_rect.v_rect = list_rect; init_data.type = GUILIST_TEXTLIST_E; init_data.is_dynamic_item_data = TRUE; create.ctrl_id = MMIFMM_OPEN_FILE_BYLAYER_LIST_CTRL_ID; create.guid = SPRD_GUI_LIST_ID; create.parent_win_handle = win_handle; create.init_data_ptr = &init_data; MMK_CreateControl( &create );//创建列表 } } } 当创建完窗口后就会通过发送同步消息来打开窗口,如下: MMK_SendMsg(win_node_ptr->base_node.handle, MSG_OPEN_WINDOW, PNULL);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服