展讯平台窗口创建流程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

窗口创建流程简介

窗口在展讯平台中是一个至关重要的概念,与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};

相关文档
最新文档