展讯平台窗口创建流程

合集下载

展讯学习笔记(整理)

展讯学习笔记(整理)

创建窗口的步骤:第一步:创建窗口数据表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(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_GET_FOCUS:break;case MSG_LOSE_FOCUS:break;case MSG_FULL_PAINT:break;case MSG_CLOSE_WINDOW:break;default:break;}return recode;}第三步:调用MMK_CreateWin创建窗口5,在MS_MMI/source/mmi_app/app目录下添加新模块:修改app.mk文件中的宏:MSRCPATH、MINCPATH、SOURCES6,字库资源放在目录MS_MMI\source\resource\mmi_res_320x480_universe\FONT中7,铃声资源放在目录MS_MMI\source\resource\mmi_res_320x480_universe\RING中8,颜色资源表在目录MS_MMI\source\resource\mmi_res_320x480_universe\color_table.xls 9,开机log在MS_MMI\source\resource\mmi_res_320x480_universe\logo.bmp10,mmi_res_prj_def.h文件中:定义语言信息、定义全局信息、定义皮肤信息、定义模块信息、定义铃声信息、定义字库信息11,在每个模块中,基本上都有一个自己模块的资源ID 头文件,例如common模块的common_mdu_def.h头文件12,mmi_theme.c和mmitheme_xx.c中实现了几乎所有控件的风格。

展讯 build环境使用手册

展讯 build环境使用手册

展讯 build环境使用手册展讯 Build 环境使用手册一、简介展讯 Build 环境是为展讯公司开发团队提供的一套集成开发环境,旨在为开发人员提供便捷、高效的开发工具和平台。

本手册将详细介绍展讯 Build 环境的安装、配置和使用方法。

二、安装1. 下载展讯 Build 环境安装包展讯 Build 环境安装包可以从展讯公司的官方网站下载。

请确保从官方渠道下载,以确保安装包的安全性和完整性。

2. 执行安装程序双击下载的安装包,按照提示一步步进行安装。

建议选择默认安装路径,以便后续操作的顺利进行。

3. 完成安装安装完成后,会在您选择的安装路径下生成展讯 Build 环境的文件夹。

您可以在此文件夹中找到所有的开发工具和相关资源。

三、配置1. 环境变量设置为了能够方便地在任意路径下调用展讯 Build 环境,我们需要对环境变量进行一些配置。

- Windows 系统:右键点击“计算机”或“我的电脑”,选择“属性”->“高级系统设置”->“环境变量”。

在系统变量中找到“Path”,并选择“编辑”。

在弹出的窗口中,将展讯 Build 环境的安装路径添加到“Path”变量的值中,并点击“确定”保存。

- macOS / Linux 系统:在终端中输入以下命令,并将展讯 Build环境的安装路径替换为您的实际路径。

```shellexport PATH=/your/installation/path:$PATH```2. 配置开发工具根据您的开发需求,展讯Build 环境提供了多种开发工具和插件。

您可以根据需要进行安装和配置。

- IDE:展讯 Build 环境支持多种集成开发环境,如 Eclipse、Android Studio 等。

您可以根据个人喜好进行选择和安装。

- SDK:展讯 Build 环境提供了丰富的软件开发工具包,包括Android SDK、Java SDK 等。

您可以根据项目需要进行安装和配置。

展讯平台MMI介绍

展讯平台MMI介绍

2019/10/15
Proprietary and Confidential Information
18
GUI
GUI 模块的主要功能就是给应用开发提供最基本的图形 控件接口,并跟窗口系统、消息机制结合,处理基本的 人机操作
2019/10/15
Proprietary and Confidential Information
每当需要增加新的大块Memory Block的时候,首先是应该考虑是否可以 和别的模块共用。不行再增加新的block。
2019/10/15
Proprietary and Confidential Information
17
培训内容
平台简介 Reference MMI介绍 GUI介绍 Kernel介绍 资源介绍 实例介绍
22
GUI提供的控件(续)
• Animition • Calendar • Textbox • Msgbox • Prgbox • Punctuation • Selectionpage • Label • Softkey
• Statusbar • Strokepage • Block(68ad提供半透显示) • Button • Dropdownlist • Richtext(68ad提供) • Iconlist (68ad提供) • S发人员专注于应用的功能开发, 而不是过多考虑界面的开发
• 方便添加新控件 • 更改现有控件风格
2019/10/15
Proprietary and Confidential Information
24
控件(续)
控件的风格
• 每一类Control和Window的缺省显示风格定义在文件 mmi_theme.c/h中

《展讯平台简介》课件

《展讯平台简介》课件

5G技术:展讯平台将积极布局5G技术,为未来通信提供 更广阔的发展空间
人工智能:展讯平台将加强人工智能技术的研发和应用, 提高平台的智能化水平
物联网:展讯平台将致力于物联网技术的研发和应用,推 动物联网产业的发展
云计算:展讯平台将加强云计算技术的研发和应用,提高 平台的数据处理能力和服务水平
数据处理技术: 采用先进的大数 据处理技术,包 括数据清洗、数 据挖掘、数据分 析等
存储技术:采用 分布式存储技术, 提高数据存储的 安全性和可靠性
数据备份:采用 多节点备份技术, 确保数据安全
数据加密:采用 高强度加密技术, 确保数据安全
网络安全:采用先进的防火墙技术,防止网络攻击和数据泄露
数据加密:采用高强度的加密算法,确保数据传输和存储的安全性
用户特点:政府机构用户通常具有较高的权威性 和影响力,对展讯平台的需求也较为稳定和可靠。
应用场景:政府机构用户主要通过展讯平 台发布政策法规、行业动态等信息,同时 也可以利用平台进行项目招标、采购等活 动。
用户反馈:政府机构用户对展讯平台的评价较高, 认为平台具有权威性、可靠性、稳定性等特点, 能够满足其发布信息、交流合作等方面的需求。
合作前景:展讯平台将与全球范围内的合作伙伴共同开发新技术、新产品,实现互利共赢。
技术合作:展讯平台将加强与国际知名高校、科研机构的合作,共同研发新技术,提升技术实 力。
市场合作:展讯平台将加强与国际知名企业的合作,共同开拓海外市场,实现市场扩张。
加强技术研发,提升产品竞争力 拓展市场,扩大市场份额 加强与合作伙伴的合作,共同推进行业发展 提升服务质量,提高客户满意度
技术架构:基于ARM架 构,支持多种操作系统
系统组成:包括CPU、 GPU、内存、存储等硬 件模块

展讯android平台基础

展讯android平台基础

展讯android软件平台基础(for SC8810)目录1.Android基本概念 (2)2.开发环境搭建 (4)安装ubuntu操作系统 (4)设定安装源 (4)安装开发包 (5)展开IDH包 (5)3.代码目录结构 (6)4.编译方法和系统 (7)5.烧录image方法 (8)传统烧录方法 (8)fastboot烧录方法 (8)6.adb (9)7.Log系统 (11)8.Q&A (12)1.Android基本概念Software stack for mobile devices, including operating system, middleware and key applications.2.开发环境搭建安装ubuntu操作系统设定安装源$ sudo vi /etc/apt/sources.listubuntu-10.4:deb /ubuntu/ lucid main multiverse restricted universedeb /ubuntu/ lucid-backports main multiverse restricted universedeb /ubuntu/ lucid-proposed main multiverse restricted universedeb /ubuntu/ lucid-security main multiverse restricted universedeb /ubuntu/ lucid-updates main multiverse restricted universedeb-src /ubuntu/ lucid main multiverse restricted universedeb-src /ubuntu/ lucid-backports main multiverse restricted universe deb-src /ubuntu/ lucid-proposed main multiverse restricted universe deb-src /ubuntu/ lucid-security main multiverse restricted universedeb-src /ubuntu/ lucid-updates main multiverse restricted universe ubuntu-10.10:deb /ubuntu maverick partnerdeb-src /ubuntu maverick partnerdeb /ubuntu maverick maindeb-src /ubuntu maverick maindeb /ubuntu/ maverick main restricted universe multiversedeb /ubuntu/ maverick-backports restricted universe multiversedeb /ubuntu/ maverick-proposed main restricted universe multiverse deb /ubuntu/ maverick-security main restricted universe multiversedeb /ubuntu/ maverick-updates main restricted universe multiversedeb-src /ubuntu/ maverick main restricted universe multiversedeb-src /ubuntu/ maverick-backports main restricted universe multiverse deb-src /ubuntu/ maverick-proposed main restricted universe multiverse deb-src /ubuntu/ maverick-security main restricted universe multiverse deb-src /ubuntu/ maverick-updates main restricted universe multiverse安装开发包更新了安装源之后,需要执行下面的命令安装必要的包$ sudo apt-get update$ sudo apt-get upgrade$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind eclipse vim ssh git libodbcinstq1c2 odbcinst1debian1展开IDH包3.代码目录结构最外层目录android:-- Makefile (全局的Makefile,里面只包含build/core/main.mk)-- 3rdparty (包含编译脚本,工具,第三方driver, hal, app,binary)-- bionic (bionic C库,bionic含义为仿生,这里面是一些基础的库的源代码)-- bootable (启动引导相关代码)-- build (存放系统编译规则及generic等基础开发包配置、脚本工具)-- cts (Android兼容性测试套件标准)-- dalvik (Dalvik JA VA虚拟机)-- development (应用程序开发相关,需要的模板和工具)-- device (设备厂商的示例文件)-- external (Android使用的一些开源的模组)-- frameworks (核心框架层——java及C++语言)-- hardware (部分厂家开源的硬解适配层HAL代码)-- kernel (Linux内核)-- ndk (一系列工具合集,帮助开发者快速开发C/C++动态库)-- out (编译完成后的代码输出与此目录)-- packages (应用程序包)-- prebuilt (x86和arm架构下预编译的一些资源)-- sdk (Android sdk及模拟器)-- system (Android底层文件系统库、应用及组件——C语言)-- u-boot (Bootloader,引导加载器)-- vendor (厂商定制代码)4.编译方法和系统$ cd 3rdparty/$ ./build.products.sh00). sp8810gaExample:*1* ./build.products.sh sp8810ga2 ./build.products.sh s p8810ga [subcmd]3 jobs=16 ./build.products.sh sp8810ga++++++++++++++++++++++++++ subcmd list ++++++++++++++++++++++++++prebuild [dirname] -- 编译android工程时脚本会将第3方chip的修改动态patch到android工程中lbuild [dirname] [clean] -- 调用第3方build.sh脚本中的function my_local_build函数(主要用来编译ko)nbuild -- 只编译标准androidfprebuild -- 快速build需要的前提配置自动设置,同时完成一次彻底编译(建议使用)fbuild -- 快速build,不编译3rdparty下的ko(一旦repo sync,务必重新执行fprebuild)fbuild2 -- 快速build,在fbuild基础上,再额外编译3rdparty下的文件(建议使用)clean -- 清除第3方对android的所有修改,恢复到原始的android版本,可以认为是unpatch.diff [dirname] -- 比较第3方代码和android标准代码的差异,即生成patchdiff2 [dirname] -- 用beyondcompare比较第3方代码和android标准代码的差异install [dirname] -- 将第3方编译结果安装到out/target/product/xxxx/system/sps*目录install2 [outdir ] -- 将product产品编译结果安装到outdir目录(用来在批量编译产品时完成自动拷贝)ramdisk -- 编译product产品对应的ramdisk.img,将init.3rdparty.rc修改内容添加到ramdisk.imgrecovery -- 编译product产品对应的ramdisk-recovery.img和recovery.img system -- 重新打包system文件夹生成system.imguserdata -- 重新打包data文件夹生成userdata.imgbootimage -- 生成boot.img和linux.bin内核文件bootimage2 -- 先删除.config,然后编译整个内核,最后生成boot.img和linux.bin 内核文件5.烧录image方法编译之后产生的image目录在:Out/target/product/hsdroid/sps.images.sp8810ga/可以看到,idh包编译出来的需要烧录的image是:fdl2.bin, u-boot-spl-16k.bin, u-boot.bin,boot.img, system.img, userdata.img, recovery.img另外,展讯还会release modem image:Vmjaluna.img, DSP.bin, nvitem.bin, Modem.bin传统烧录方法使用research downloader, upgrade downloader, factory downloader, 烧录上面所有的image。

展讯_软件发布流程

展讯_软件发布流程

软件发放流程一.准备工作:1.软件需求表2.资源:logo(bmp格式,16位),墙纸(JPG格式),开关机动画(GIF),铃声…二.建立项目工程:1.配置对应的.mk文件:a.复制一份相同主板的其他项目的.mk文件(f6,h322,th2,x6,h320,x5…),重命名为,eg:F6项目,重命名为:project_snd_f6_xxx.mk(xxx客户名简写),该文件位于工程根目录下。

b.根据客户需求(需求表)修改project_snd_f6_xxx.mk文件,具体需注意事项如下:1):定义:export F6_XXX_MMI_FEATURE = TRUE ###嘉源的MMI FEATURE# Option1:TRUE# Option2:FALSE2): 定义:export CUST_RES_SET =F6_XXX01 ###对应客户快关机动画和墙纸的目录3):选择主菜单的风格:MAINMENU_STYLE=。

,SPECIAL_EFFECT_ICON_SIZE=。

这两个变量的值是根据需求表中选择的,且要对应。

4):Driver 部分:根据需求表配置Driver部分,注意如下变量(1)定义:export LCD_DRV_DEBUG_SUPPORT = TRUE ###DEBUG LCD# Option1:TRUE# Option2:FALSEexport SENSOR_DIRECTION_CHANGE = TRUE ###DEBUG SENSOR# Option1:TRUE# Option2:FALSE此处的两个宏是在工程模式中手动调试LCD和SENSOR用的,与其相关的宏有,对应的主板宏要定义如:H322_PCB =TRUE,F6_PCB = TRUE,X6_PCB = TRUE,若为单摄像头,则DUAL_SENSOR_SUPPORT = FALSE和exportSENSOR_DIRECTION_CHANGE = FALSE,(2)再根据需求表配置如下驱动相关的:export LCD_DRV = XXXX,若此类型的屏我们没调过,此项可不写(具体可咨询驱动工程师)DUAL_SENSOR_SUPPORT ,单双摄像头HORSE_RUN_LED ,跑马灯CUSTOMER_SPECIAL_AUDIO_PARA,客户指定的音频参数5):SP部分:根据需求打开或关闭相应的SP开关即可,一般保持默认,一般需要修改客户ID,对应如下文件鱼游:popo_prot.c扬讯:met_platMgr.c艾麒:elive_common.h思凯:mmimrapp.h以上客户ID的修改方法请参照之前已经修改的项目执行。

展讯平台窗口创建流程

展讯平台窗口创建流程

窗口创建流程简介窗口在展讯平台中是一个至关重要的概念,与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,};而动态窗口在创建完基本的属性后,需要手动创建窗口的其它属性。

展讯平台开发说明

展讯平台开发说明

Build环境使用手册Version: 0.2.52010-10-14修订历史重要声明版权声明本文档中的任何内容受《中华人民共和国著作权法》的保护,版权所有© 2006, 展讯通信有限公司,保留所有权利,但注明引用其他方的内容除外。

商标声明本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。

在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。

不作保证声明展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。

保密声明本文档(包括任何附件)包含的信息是保密信息。

接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。

目录1说明 (6)2编译环境及相关软件 (7)3Source Code目录结构 (8)4基本编译命令 (10)4.1全新编译整个项目[new] (10)4.2更新项目[update] (11)4.3单独编译模块 (11)4.4清除模块编译结果 (11)4.5清除所有编译结果[cleanall] (11)4.6生成可执行文件 (11)4.7编译FDL/bootloader (11)4.8编译NV (11)4.9编译MMI Resource 文件 (12)4.10编译PC模拟器工程 (12)5其它编译命令 (15)5.1编译Logel工具 (15)5.2pclint 扫描 (15)5.3编译完成net send提醒功能 (15)5.4编译命令的简写 (15)5.5多线程编译 (15)5.6分布式编译 (16)5.7编译出错暂停 (16)5.8生成编译选项 (16)6Makefile 工作流程 (17)6.1重要脚本 (17)6.2Makefile 执行流程 (18)6.3两种编译方式 (19)7模块修改及项目定制 (21)7.1添加或删除模块 (21)7.2修改模块 (21)7.3创建新项目 (22)7.4修改项目Feature Options (23)8第三方编译选项说明 (24)9相关使用技巧 (25)9.1查看log文件 (25)9.2makefile 报错:No rule to make target ` XXX ', needed by `yyy'. (25)9.3makefile 报错:Can't return outside a subroutine at ./make/perl_script/sprd_macro_check.pl line XXX (25)9.4Source Insight和ClearCase配置 (25)9.5鼠标右键命令行快捷方式设置 (28)9.6DOS下输入命令时用Tab键进行命令自动填充 (28)1 说明Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具,Build环境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚本执行的方式产生其他软件以及开发工具,如fdl, bootloader, nv_parameter,resource等。

  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 softkeyif (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 titleif (0 != win_handle){GUIWIN_CreateTitleDyna(win_handle, TXT_FMM_FILE_LIST);//创建标题栏}//create listif( 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);。

相关文档
最新文档