绿茵吧足球游戏网fmdf11竖行头像包版higv开发指南_第1页
绿茵吧足球游戏网fmdf11竖行头像包版higv开发指南_第2页
绿茵吧足球游戏网fmdf11竖行头像包版higv开发指南_第3页
绿茵吧足球游戏网fmdf11竖行头像包版higv开发指南_第4页
绿茵吧足球游戏网fmdf11竖行头像包版higv开发指南_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HiGV图形组件的基本架构、各模块的功能特点和流程,场景设计及HiGV图形组件的基本架构和各模块的功能,使客户能够对

2017-05-4.262017-02-2016-11-2016-09-2016-07-2015-04-2014-12-2014-7-2014-01-2013-11-2013-03- 1 1HiGV架 1 2 3 3 3环境配 1 1 1 2模块详 1控 1 1 1 2消 3 3 4 5 6 7 8Xml定义的消息回调事 10绘 11 11 12 14定时 14 资 Xml设置资 ADM使 数据模型 多语 多语言xml描 Xml文件描 Xml界面描 Xml解 控件详细介 1 1 1窗口与 2 3 4 4 4 5 6 6Label控 6 7 7ImageEx控 8 8 9 9 Edit控 Spin控 Spin箭 Clock控 35 36 37 38 阻塞式显示 43 HiGV编程技 1 1 1 1 2 2 4 4 5 7 多图 RLE格式使 输入 动 图1-1HiGV架构 图1-2单击“OK”按钮前的界 图1-3单击“OK”按钮后的界 图3-1控件继承关系 图3-2消息回调流程 图3-3HiGV界面图 图3-4OK按钮绘制流程 图3-5窗口显示时序 图3-6九宫格皮肤示意 图3-7列表框示 图3-8控件与数据模型绑定关系 图4-1界面示 图4-2非共享模式窗口叠加图 图4-3共享模式窗口叠加图 图4-4GroupBox图 图4-5Normal类型Button图 图4-6Switch类型Button图 图4-7Toggle类型Button图 图4-8Label图 图4-9Image图 图4-10内存图片说明图 图4-11单元格ListBox图 图4-13Edit图 图4-15IPEdit图 图4-16Spin图 图4-17ProgressBar图 图4-18图片密码框图 图4-19时钟图 图4-21ScrollBox图 图4-22ComboBox图 图4-23Calendar图 图4-25MessageBox图 图5-1拼音输入法图 图5-2数字软键盘图 表3-1内部消息处理列 表3-2xml消息回调列 表4-1Clock显示格式定 HiGVHiGV是一个轻量级的GUI系统,主要是为芯片平台提供统一的轻量级、高效、易用GUISDKHiGO库,而HiGO建立在基本的图形驱动(FrameBuffer、芯片2D加速驱动、图片编解码等)之上,如图1-1所示。HiGVXML标记语言进行界面描述,具有统一高效的系统资源管理功能,并且HiGV还提供了丰富的控HiGVBuilder来图1-1HiGVTaskTaskMsgWindowResInputMultiHiGVInputInputdeviceHiGVHiGVDependHiGV3图层(layer:独立的图形缓冲区,多个图层可以使用apha值进行合成输出,对(surface:surfacesurface搬移至图层进行表现。视图(view:xml界面描述文件中的view虚拟作为界面描述xml控件(wiget:界面的基本组成元素,图形的具体表现载体,我们所看到的界面即由若干个控件组成,例如按钮、文本框、图片框等。控件有自己的矩形区域,这决定了它在界面中的显示位置及大小。控件可以分为容器类控件和非容器类控件,非容器类控件只能布置在容器类控件中。窗口(window:界面基础元素,容器类控件。窗口内可以放置任何非窗口控件,且窗口本身不能放置在其他容器类控件内。窗口与窗口之间是同级兄弟关系可以互相叠加,窗口内不能再包括窗口,窗口必须附属在图层上。children:将B称为A的父,A称为B的子。有着相同父容器的控件,建议不要重叠并且同Z序(windowlevel:皮肤(skn:控件的基本外观描述,控件的每种状态对应一个皮肤,控件的基本状态有以下四种,(ADM:Astract默认数据缓冲(DDB:DefalDataBase,为数据模型提供简单的数据缓冲和管资源(resource:句柄(handle:控件、ADM(msg:生,GUI系统或应用程序会根据消息类型做出响应,并回调用户注册的消息事消息回调事件(msgcallback:用户通过注册消息回调事件将函数与控件绑定,件作为消息回调,详见3.2.4HiGV略大量的控件创建代码,HiGV还会自动生成控件句柄,详见Xml文件描述。HiGV的接口创建界面控件,接口创建控件需要大量的变量放置这些HelloWorldXML文件、描述界面事件文XML描述文件为: “hellosample” <!—viewname--> “hello <!—windowname-- <!—widgetpos-- “commonpicskincolorkey”<!—normalskin-- “hellowindowonshow”><!—onshowcallback-- “hellobutton <!—okbuttonID-- “commonpicnormalskin “commonpicactiveskinbutton” <!—activestate “IDSTR <!—multilanguageID-- “hellobuttononclick”/><!—onclickcallback-- “hellolabelhelpinfo”<!—labelID-- “commonskin UIXXX.c/**WindowonshowcallHIS32hellowindowonshow(HIHANDLEhWidget,HIU32wParam,HIreturnHIGVPROC}/**OKbuttononclickcallHIS32hellobuttononclick(HIHANDLEhWidget,HIU32wParam,HIU32lParam)HIS32/**Changethelabel HIGVWidgetSetText(hellolabelhelpinfo,“HelloreturnHIGVPROC}#defineSCREENWIDTH1280#defineSCREENHEIGHTHIS32main(HIS32argc,HICHAR{HIS32HIS32ghApp/**Thelayerinfo,layerwidthis1280andheightis720.ThepixelformatisHIGOPF8888,Eachpixeloccupies32bits,andtheA/R/G/Bcomponentseachoccupies8bits.UseDualbufferssupported.*/HIGOLAYERINFOSLayerInfo {SCREENWIDTH,SCREENHEIGHT,SCREENWIDTH,SCREENHEIGHT,SCREENWIDTH,SCREENHEIGHT,(HIGOLAYERFLUSHTYPEE)(HIGOLAYERBUFFER HIGOLAYERDEFLICKER HIGOPF8888,HIGOLAYERHD/**higv HIGVif(HISUCCESS! return/**Initparsermoduletoparserbinaryfilefrom HIGVPARSERif(HISUCCESSif(HISUCCESS!{printf("HIGVPARSERInitfailed!Return:return}/**Load HIGVPARSERif(HISUCCESS!/**Load HIGVPARSERif(HISUCCESS!{HIGVHIGVPARSERreturn}/**CreatelayerfordrawHIHANDLELAYER INVALID HIGVLayerCreate(&LayerInfo,&LAYERif(HISUCCESS!{printf("HIGVLayerCreateExfailed!Return:%xHIGVHIGVPARSERreturn}printf("LAYER0createok/**Loadview,PROJECTIDis/**Loadview,PROJECTIDisviewIDfromxmlfile.CreateallwidgetofPROJECT HIGVPARSERLoadViewById(PROJECTif(HISUCCESS!{printf("HIGVPARSERLoadViewByIdfailed!Return:HIGVHIGVPARSERreturn}/**CreateHiGV/**CreateHiGV HIGVAppCreate("MainApp",(HIHANDLE*)&gif(HISUCCESS!{ printf("HIGVAppCreatefailed!Return: HIGV HIGVPARSER return/**Show HIGVWidgetShow(PROJECTif(Ret! printf("HIGVWidgetShow()failed....:%d HIGVWidgetActive(PROJECTif(Ret! printf("HIGVWidgetActive()failed....:%d/*StartHiGVHIGVAppStart(g/**IftheHiGVappover,theHIGVAppStartwillbeHIGVAppDestroy(gHIGVPARSERHIGVAppStop(greturn}程序运行后,当按下“OKonclickhellobuttononclick函数,在该函数中修改文本框内容为“HelloWorld!1-2、图1-3所示。开发所需要的头文件全部位于SDKpub/include驱动文件(ko形式)SDKrootboxkmodSDKHiGV,而要在HiGVHiGV的开发库和工具xml2bin、HiGVBuilderEclipsePC路径等,并且最终可自动生成界面布局和资源XML描述文件。xml2binHiGV提供的可以将界面和资源XML描述文件转换成HiGV可识别的二进制文件(higv.bin)C代码文件(higvcextfile.c)的工具。HiGVlibhigvfastboot、hikernel(Linux内核、rootbox映像文件。详细请参见《Hi3559V100/Hi3556V100开发环境用户指南》和《HiTool工具快速入门视HiGV依赖的内核驱动模块。在运行程序之前,需要正确加载图形系统依赖内核驱动模块,如TDE、FB等。运行程序。进入“xxxsample”文件夹,执行可执行程序“./xxxsample”,即可HiGVSDKHiGOSampleHiGOHiGV的绘制基

过识别handle找到对应的实例。件《higvwidget.h》包含了控件的公共接口,消息定义及控件其他公共属性。使用控件前需要先创建一个控件。应用程序示例展示了使用xml创建控件的方法。此外,也可以调用HiGV的创建接口生成控件,如下是一段简单的窗口创建代码:HIGVWCREATESinfoWindow;HIGVWINCREATESWinCreate;HIHANDLEmemset(&infoWindow,0x00,sizeof(infoWindow)); HD0;//窗口所属图层 infoWindow.pPrivate&WinCreate; INVALIDHANDLE;//窗口没有父容器 if(HI HIGVWidgetCreate(&infoWindow,{HIGVWidgetSetSkin(hWindow,HIGVSKINNORMAL,window}HIGVWidgetShowHIGVWidgetHideHIGVWidgetSetTextHIGVWidgetPaintHIGVWidgetDestroyWindow、Spin、Listbox等控件组合而成。HiGVC++3-1所

消息是由GUI系统或用户触发的能引起系统行为改变的事件。当消息产生,GUI系统HiGVHIGVAppStart开始至调用接口HIGVAppStop停止。HiGV获取到消息后,将消息传至焦点控件进行处理,完成后HiGV消息定义在头文件《higvwidget.h》中,有统一的前缀“HIGVMSG按键、鼠标、触摸屏等输入设备产生的消息事件。由HiGV适配或用户适配接收HIGVMSGKEYDOWN。遥控器、前面板等按键设备抬起产生HIGVMSGKEYUP。HIGVMSGMOUSEDOWN鼠标双击产生HIGVMSGMOUSEDBCLICK。鼠标移入某控件范围产生HIGVMSGMOUSEIN。HIGVMSGMOUSEOUT。HIGVMSG触摸屏上某控件范围进行轻触并抬起操作产生HIGVMSGGESTURETAP触摸屏上某控件范围进行长按操作产生HIGVMSGGESTURELONGTAP触摸屏上某控件范围进行轻扫操作产生HIGVMSGGESTUREFLINGHIGVMSGGESTUREHIGVMSGGESTURE理触摸事件。手势事件是Touch事件的高级包装,其判断的依据是Touch事件HIGVGESTURELONGTAP:长按手势,超过两秒触发。HIGVGESTURESCROLL:滑动手势,手指在触摸屏上滑动。所有消息发送接口见头文件《higvmsg.hHiGVHIGVWidgetShowHIGVMSG和HIGVMSGPAINT,HIGVListSetSelItem产生HIGVMSGITEMSELECT。HIGVMSGTIMER控件内部数据改变产生的事件,如控件获取焦点触发HIGVMSGGETHIGVMSGLOSTFOCUSHIGVMSGPAINTHIGVMSGREFRESHWINDOWHIGVMSGFORCEREFRESHWINDOWHIGVMSGTIMERHIGVMSGDATACHANGEHIGVMSGSTUPDATE滚动字幕更新消息。HIGVMSGMOUSEMOVE鼠标移动消息。HIGVMSGMOUSEWHEEL鼠标滚轮消息。不同的消息参数意义不一样,具体请参考头文件《higvwidget.h但输入设备触发的输入事件(鼠标、按键)在产生时不会指定目标控件,HiGV对这类1.将按键消息分发给当前焦点窗口2.如果焦点窗口有孩子控件,窗口将按键传递给子控件,若子控件为容器类控件则继续3.4.如果用户注册的按键消息回调函数返回值为HIGVPROCGOON,消息会逐层向当前HIGVPROCSTOP3.4.如果用户注册的鼠标消息回调函数返回值为HIGVPROCGOON,消息会逐层向当前HIGVPROCSTOPHiGV息回调流程如图3-2所示。HiGVCallCallHIGVWidgetSetMsgProcHIGVPROCORDERBEFORE表示CustomProcHIGVPROCORDERAFTERCustomProc在控件内部处理之后回调。typedefHIS32(*HIGVMSGPROC)(HIHANDLEhWidget,HIU32wParam,HIU32lParam)用到该参数,具体请参考《higvwidget.hHIGVPROCGOON表示该条消息继续传递,影HIGVPROCSTOP可以结束事HIGVMsgSendAsync(HIHANDLEhWidget,HIU32MsgId,HIU32Param1,HIU32Param2)HIGVMsgSendAsyncWithData(HIHANDLEhWidget,HIU32MsgId,HI*pBuf,HIU32控件接口触发:HIGVWidgetShow接口可以使隐藏状态的控件显示出来,它同HIGVMSGSHOWwParamlParam都为0。HIGVU32PARAMTORECTHIRECTHIGVPROCORDERBEFORE的回调事件返回值如果不为HIGVPROCGOON会中断控件绘制。HIGVPROCORDERBEFORE的回调事件。如果返回值不为HIGVPROCGOON会中断控件对该消息的响应;HIGVPROCGOON消息会继续传递给控件父容器输入设备触发:wParamTOUCH事件结构体长度,lParamTOUCH事件结构HIGVPROCORDERBEFORE的回调事件。如果返回值不为HIGVPROCGOON会中断控件对该消息的响应;HIGVPROCGOON消息会继续传递给控件父容器输入设备触发:wParamGESTURE事件结构体长度,lParamTOUCH事件结HIGVPROCORDERBEFOREHIGVPROCGOON会中断控件对该消息的响应;HIGVPROCGOON消息会继续传递给控件父容器。MsgHiGVHIGVMSGMsgHiGVHIGVMSGHIGVMSGHIGVMSGHIGVMSGSwitchHIGVFOCUSSTATEMsgHiGVHIGVMSGLANHIGVMSGDATAHIGVMSGSTATEChangeHIGVSTATENAMEHIGVMSGSTHIGVMSGSCROLLBARHIGVMSGREFRESHHIGVMSGFORCEREFRESHHIGVMSGSwitchHIGVSKINHIGVMSGSwitchHIGVSKINHIGVMSGLostHIGVMSGHIGVMSGLostHIGVMSGHIGVMSGMoveHIGVMSGHIGVMSGHIGVMSGHIGVMSGHIGVMSGGESTUREHIGVMSGGESTUREHIGVMSGGESTUREHIGVMSGGESTUREHIGVMSGHIGVMSGHIGVMSGUnlockHIGVMSGMoveMsgHiGVHIGVMSGKickbacktooriginXmlHIGVWidgetSetMsgProc(没有的可以通过接口注册,适用于所有控件的回调事件如表3-2所示。XmlMsgMessageHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGGETHIGVPROCORDERHIGVMSGLOSTHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGFOCUSEDITEXIHIGVPROCORDERHIGVMSGLANHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGGESTUREHIGVPROCORDERHIGVMSGGESTURELONGTHIGVPROCORDERHIGVMSGGESTUREHIGVPROCORDERHIGVMSGGESTURESCROLHIGVPROCORDERHIGVMSGVALUEONCHANGHIGVPROCORDERXmlMsgMessageHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDERHIGVMSGHIGVPROCORDER

HIGVWidgetPaint接口触发的绘制为异步绘制,其基本流程如下:步骤1.计算绘制区域。2.发送绘制消息,区域为步骤14.回调优先级为HIGVPROCORDERBEFORE的消息回调事件。5.6.绘制控件的其他内容(图片、文字等)7.HIGVPROCORDERAFTERHIGVWidgetUpdateHIGVWidgetPaint,因为该接口异步绘制不会阻塞主线程的其他处理,在部分特殊场景要求控件同步绘制的,可以调用HIGVWidgetUpdate。3-3OKSchedulingReminder,在父窗PaintPaintDrawGetactiveDrawonshowHIGVWidgetIsShow获取该窗口显示状态,此时绘制还未成onshow中隐藏自己,这会导致接下去的绘制和显示图3-5窗口显示时序图SendpaintonshowcallreturnPaintmsgonrefreshcallafterrefreshmsgrefreshlayersendafterrefreshmsgrefreshmsgDrawsendrefreshMsgUI1.HIGVWidgetShow,如果该窗口为隐藏状态且可以显示,则向自己发送一个异onshow事件后返回接口,用户可以在onshow做窗口绘制之前的准备工作。2.收到绘制消息后,窗口绘制自己,再绘制显示状态的孩子控件,然后向自己发送一个3.绘制和刷新图层都是异步消息,因此收到步骤2发送的刷新图层消息后,窗口会检查4.窗口收到步骤3发送的afterrefreshonrefresh事件,用户可以在onrefresh做窗口绘制完成后的其他处理。隐藏和显示是对应的,HIGVWidgetHide示时,可以显示或隐藏Button。

定时器的作用是延期或定期触发事件。HiGV的定时器是与控件绑定的,一个定时器只1.HIGVTimerCreate(HIHANDLEhWidget,HIU32TimerIDHIU32Speed)接口 着不同的TimerID,不同控件的定时器TimerID可以相同。步骤2.注册定时器回调事件。XmlontimerHIGVWidgetSetMsgProc接口为定时器事件注册一个回调函数,OnTimer(HIHANDLEhWidget,HIU32wParamHIU32lParam)。步骤3.使用定时器。HIGVTimerStart(HIHANDLEhWidgetHIU32TimerID)启动定时器,如果定时HIGVTimerStop(HIHANDLEhWidgetHIU32TimerID)停止定时器,如果非首HIGVTimerReset(HIHANDLEhWidgetHIU32TimerID)重启定时器,定时器处于启动状态时重新计时,多用于在OnTimer中调用实现循环定时器。4.HIGVTimerDestory(HIHANDLEhWidgetHIU32TimerID)接口可以实现定时HiGV定时器启动(HIGVTimerStart)后计算时间,定时器到达时间点后,向绑定的控件发送HIGVMSGTIMER事件。HiGV主线程收到HIGVMSGTIMER后,分发至绑OnTimerHiGV主线程中执行的,保证HiGV主线程顺畅才能保证准时地进入定时器回调函数,一些耗时较长的业务会

HiGV提供了统一资源管理机制,主要资源包括:字体、图片和皮肤。资源管理模块通成系统内存和性能的浪费。HiGV资源管理的对外接口统一在《higvresm.h》中。HIGVResCreateID(constHICHAR*pFileNameHIGVRESTYPEEResType,HIRESID*pResID)根据资源路径和选择的资源类型创建res,并为其分配一个exportHIGVRESIMAGEPATH=xxxexportHIGVRESFONTPATH=xxxexportHIGVRESIMAGEPATH=./res/image/,pFileName为“button.png”,那么HiGV会以“./res/image/button.png”作为资源路径,注意“/”不要重复。配置了资源环境变量后,接口HIGVResCreateIDNoPrefixPath可以创建不读取环境变量的typedefstructhiHIGVFONT{HIRESIDHIRESIDHIU32HIBOOLHIBOOL}HIGVFONTHIGVFONTSSbFontIDMbFontIDID,由HIGVResCreateID得来。#defineSBFONTFILE"./res/sbfont.ttf"#defineMBFONTFILEHIS32AppCreateSysFont(HIHANDLE{HIS32HIRESIDSbFont,HIHANDLEHIGVFONTS HIGVResCreateID(SBFONTFILE,HIGVRESTYPEFONT,if(HISUCCESS! return HIGVResCreateID(MBFONTFILE,HIGVRESTYPEFONT,if(HISUCCESS! HIGVRes return HI HI HIGVFontCreate((constHIGVFONTS*)&FontInfo,if(HISUCCESS! HIGVRes HIGVRes return returnHI}

typedefstructhiHIGVSTYLE{HIGVSTYLETYPE HIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHIGVSTYLEMEMBERUHI HI HI }HIGVSTYLEHIGVSTYLES是创建皮肤的信息结构,HiGV控件皮肤由九宫格组成,分为色块皮HIGVSTYLEMEMBERU为十六进制的ARGB颜色值;如果是图片皮肤,则HIGVSTYLEMEMBERU为图片资源ID。图3-6九宫格皮肤示意图HIHIGVResDestroyHiGV完成,非常便捷。id"commonfonttextsbnamembnamesizeisboldisitalicid"buttontypebtmlineidx"./res/default/buttontoplineidx"./res/default/buttonllineidx"./res/default/buttonrlineidx"./res/default/buttonltopidx"./res/default/buttonrbtmidx"./res/default/buttonrtopidx"./res/default/buttonlbtmidx"./res/default/buttonbgidx"./res/default/buttonisnodrawbglinewidthfgidxid"graytypebtmlineidxtoplineidxllineidxrlineidxltopidxrbtmidxrtopidxlbtmidxbgidxisnodrawbglinewidthfgidxXml属性设置对应接口的结构属性,如下示例中的commonfonttext18、HIGVWidgetSetFont(hButton0,commonfonttext18);//为hButton0控件设置字体HIGVWidgetSetSkin(hButton0,HIGVSKINNORMAL,buttondefault);//为接口创建控件,可以在创建控件时将HIGVWCREATES结构的style成员设为HIGVSTYLEHIDEUNLODRES。显示控件必须要调用接口HIGVWidgetShow(),如果显示的是一个容器控件,则会加载该容器所有显示状态的子控件。前文的消息介绍中提到过HIGVMSGSHOW事事件、发送消息HIGVMSGPAINT的触发顺序是:隐藏不释放资源风格是在控件接收到HIGVMSGPAINT事件后,第一次绘制时加载资源再进行HIGVResSetResident(HIRESIDResID)可以将图片及字体资源设为常驻,常驻资源HIGVWidgetShow显示新界HIGVWidgetHide隐藏老界面,避免两个界面共用的资源释放后重新加ADM(AbastractDataModel)抽象数据模型,主要是为了显示批量的数据,使用控件ListBox、Spin、ScrollGrid等。HiGV采用界面显示与数据管理分离的原则,由控件实例显示数据,ADM控制数据。据管理,用户还可以指定外部数据库,例如SQLiteDB或者在嵌入式领域常用的BerkeleyDB等。定的控件自动刷新。数据模型的头文件为《higvadm.h3-7所示,这是一个绑定了数据模型的列表框,该列表框中的所有字串和图片都typedefstructhiHIGVCELLATTR{HIGVDTEHIU32}HIGVFIELDATTRtypedef{HIGVDT 0,/**<charHIGVDT /**<unsignedcharHIGVDT /**<shortHIGVDT /**<unsignedshortHIGVDT /**<intHIGVDT /**<unsignedintHIGVDT /**<longlongHIGVDT /**<unsignedlonglongHIGVDT /**<floatHIGVDT /**<doubleHIGVDTSTRING,/**<char*HIGVDTHIMAGE,/**<imagehandleHIGVDTSTRID,/**<multi-langugaestringHIGVDT}HIGVDTHIGVDTS8HIGVDTD648HIGVDTS8长度为1,HIGVDTD64长度为8;HIGVDTSTRING4的整数HIGVDTHIMAGE和HIGVDTSTRID为图片资源IDID,长度为4。ADMOwnDB:HiGVDDBDB中,静态或数量较无论是哪种方式,控件与ADM绑定,ADM与数据库绑定,再由数据库管理数据。

ADMtypedefstructhiADMOPT{HIU32 HIU32 HIGVFIELDATTRS HIU32 GetCountFuncGetRowValueFunc RegisterDataChangeFuncUnregisterDataChangeFunc}HIGVADMOPTHIGVADMOPTSDBSource:OwnDB时,ADMHiGV的DB句柄,UserDBBufferRows:OwnDB不使用,UserDB时决定了每次从数据库获取的数据条目OwnDBDBHIGVDDBCreate(HIU32FieldCount,constHIGVFIELDATTRS*pFieldAttr,HIHANDLE*phDDB)phDDBHiGVDBDB将DB句柄作为HIGVADMOPTS的Dbsource(即设置为ADM的数据源。可以通过HIGVDDBAppend、HIGVDDBModify、HIGVDDBInsert等接口操作DB

据时,通知绑定的ADM通过用户注册的回调事件直接获取数据。typedefHIS32*GetCountFunc)(HIU32DBSourceHIU32*RowCnt)是获取数据总数DBSource:ADMDB句柄,因为用到的是用户指定的数据库,往往回调函自己实现这个函数,在函数中将数据总条数以*RowCnt传出。typedefHIS32(*GetRowValueFunc)(HIU32DBSource,HIU32Row,HIU32HIVOID*pDataHIU32*pRowNum)是获取具体数据的回调函数,需要用户实现这个函数,在此函数中把外部数据库的数据传给HiGV控件。listbox翻页以后。pRowNum:实际传出的数据行数,可能小于参数Num,还需要告知HiGV真实的

目前可以绑定ADMADM的控件使用着相同的数据源。HIGVWidgetBindDataSource可以将控件和ADMHIGVWidgetUnbindDataSource

HIGVWidgetSyncDBHIGVADMSync同步ADMADMHIGVMSGDATACHANGE1ADMHIGVMSGADMDATACHANGE2ADMADM创xmlADM、DB、空的回调函数,并在控件创建时就绑定ADM,非常便捷简单。 field" HIGVADMOPTSdatamodelidADMDBsourceDDBHIGVFIELDATTRSu32HIGVDTU32,具{HIU32HICHARHIU32HICHARHIRESID}这是一个绑定了数据模型“datamodelrecord”,有着五列数据的listbox,从第0 "commonskin "allwidgetwindow "allwidgetwindow "allwidgetwindow "allwidgetwindow "allwidgetwindow ontimer"allwidgetwindow onlanchange"allwidgetwindow "LAYER0" "listbox "commonskin "allwidget "spin "datamodel "commonpicskin "commonpicskin "listboxrecord "listboxrecord "listboxrecord "listboxrecord "listboxrecord "listboxrecord typedefstructHIU32HICHARHIBOOLHICHARHIHANDLEstaticHIS32ListBoxGenerateRecord(HIU32{HIS32TestRecordHIU32HIGVDBROWSHIHANDLE INVALIDListBox HIGVADMGetDDBHandle(datamodelrecord, printf(“hDDBis%d\n",HIGVDDBEnableDataChange(hDDBHIFALSE);// 0;i<Num; snprintf(Record.Name,20,"Name%d",snprintf(Record.Mobile,snprintf(Record.Mobile,20,"Tel%d", s(HI HIGVDDBAppend(hDDB&DBRow);// HIHIGVDDBEnableDataChange(hDDBHITRUEreturn}HIS32main(HIS32argc,HICHAR{…HIGVWidgetHIGVWidget ListBox HI HIGVAppif(HISUCCESS! HIGVPARSER (HIVOID)HIGVApp HIGV returnHIGVPARSER(HIVOID)HIGVAppHIGVreturn}“Text:string:12”代码中写入数据的字串长度必须为12

HIGVWidgetSyncDB同步某个控件的DBHIGVADMSync同步绑定该数据模型的所有控件;如果是非HIGV线程同步数据,直接调用以上接口可能发生段错误,正确做法是向控件发送HIGVMSGADMDATACHANGE消息,通知控件同步DB。HiGV部分控件(Label、Button、Multiedit等)可以设置并显示文本字串。HiGV提供了整体界面切换语言环境的功能,即多语言。多语言头文件请参见《higvlan.hxml多语言功能采用xml描述语言种类和多语言字符串,并利用xml2bin工具自动生成字多语言字串ID,在不同的语言环境下就能显示对应的字符串文本。目前HiGV只支持xml生成多语言字串。多语言XML "language "STRIDAMPM "STRIDAMPM "STRSET "STRIDAMPMAM;STRIDAMPM "TIMEFMTSHORT "<tt> "<tt>多语言字串的详细描述。示例中的STRIDAMPMAM、STRIDAMPMPMidIDHIGVWidgetSetTextByID为控件设置多语言ID,en、zh、ar对应Languageinfo中描述的语言环境。空HiGV会找到locale代替它。<strset和言字串ID组合,timefmt为不同语言环境的时间显示顺序。Xmlc代码中通过接口注册和使用它们。Xml文件通过HIGVLanRegisterHiGVHIGVLanChange方向也发生切换时,可能希望整体的控件布局也发生对应的改变。HiGV为此提供了便HIGVWidgetEnableMirror(HIHANDLEhWidget,HIBOOLxml文件可以用于描述界面控件、皮肤、多语言字串、字体、数据模型和常用回调事柄头文件、回调事件的头文件和回调事件的空函数c文件。FontxmlUIXml设置资ViewxmlHiGV控件并注册常用的消息回调事件。通xmlxml内,根据控件的功能为xml文件命名。 “hellosample” “hello “commonpicskincolorkey”普通皮肤 “hellowindowonshow”><!—注册的窗口onshow事件回调-- “hellobutton “commonpicnormalskin “commonpicactiveskin “IDSTR “hellobuttononclick”/><!—按钮的onclick事件回调 “hellolabelhelpinfo”<!—文本框ID “commonskin View:view并不是一个控件实例,viewxml提供一个身份标识,HiGVHIGVPARSERLoadViewByIdviewID创建该view内包含的的所有控件实例。higvcextfile.hhigvlanguage.hhigvcextfile.h对应的higvcextfile.c;如果在视xmlcview.xmlview.c文件,这些文件中有回调事件的空函数,另外数据模型也会生成一个c文件。Xmlhigv.bin中,通过调用接口HIGVPARSERLoadFile加载higv.bin文件,可以获得除多语言字串外的所有xml描述信息。44Window可以同时存在若干个窗口,他们之间可以互相重叠。由HiGO统一管理窗口的重叠关控件关联起来。窗口的头文件为《higvwin.h起,重叠一定有上下层关系。A、B两个窗口有重叠部分时,这两个窗口的Z序(windowlevel)决定了它们显示的上下层关系。Z0~1516层,Z序ZZ序相同,焦点存。如图4-2所示。LevelLevelnWinnWinWinWinLevelWinWinLevel4-3所示,共享模式A窗口无法绘制被B窗口覆盖的区域,当B窗口为透明或半透明时,A窗口被覆盖区域的更新是无法体现的。共享模式下绘制不会擦除surface原有数据,透明窗口叠加场景须通过透明的图片资源实现,在B窗口隐藏状态下先显示A窗口,待A窗口刷新到图层后再显示B窗口,即可表现出透明效果。而非共享模式显示,surface即是一块显存。创建Surface需要一定的MMZ内存,大小为“宽度*高度*像素格式的字节数(如ARGB8888为四字节非共享模式每一个窗口都有和它一样大的独立surfacesurface上绘xmlisrelease=”yes”(HIGVSTYLEHIDEUNLODRES时一并创建,直至控件销毁(HIGVWidgetDestroy)时释放。0~255,0为全透明,255为完全不透明。xmlopacity或接口HIGVWinSetOpacity可以设置该值。32位的颜色值作为colorkey,窗口上所有colorkey的颜色都会透明到图层。Xml属性colorkey可以设置该值。onshow事件,非窗口可以调用接口HIGVWidgetSetMsgPorc注册HIGVMSGSHOW图4-1中弹出框的圆角,需要保证弹出框是在背景窗口刷新到图层后再绘制。假如弹HIGVSTYLEFORCEPAINTPARENTxmlisskinforcedraw属性。该属GroupBox4-4ProgressBar控件和一个LabelGroupBox。图4-4GroupBox图示理的交互。按钮的头文件为《higvbutton.hButton可支持不同状态下背景皮肤设置,同时还支持显示前景文字,其中前景文字的常用的Button类型。check状态,但它与单选按check状态,也因值,具体了解请参考5.7输入法。checkedmousedown五种皮肤用于匹配check时的各种状态。Button内的绘制区域,文本以绘制区域对齐。应的是HIGVMSGBUTTONSTATUSCHANGE。特的属性和事件。Label的头文件为《higvlabel.h置作为Image的显示内容。Image的头文件为《higvimage.hMMZ内存中的图片数据。只HIGVImageDrawMemImage(HIHANDLEhImage,HIGVMemInfo*MemInfo,HIU32ImageHeight,HIU32ImageWidth,HIRECT*pSrcRect,HIRECT*pDstRect,HIGOBLTOPTS*pBlitOpt,HIBOOLTransparent)

HIGVImageFreeMemSurface将内存图片释放。遵循谁申请谁释放的原则,接口HIGVImageFreeMemSurfaceMemInfo,该接口只会释放贴图过程中生成的图片surface。ImageEx主要用于显示动态GIF图片,图片显示支持居中和拉伸处理,如果待显示区《higvimageex.h头文件为《higvlistbox.h4-11为ListBox,其功能包括:图4-11ListBox图示typedef{HIU32HIU32HIBOOLHIBOOLHIBOOLHIBOOLHIBOOLHIBOOLHIU32HIU32HIU32HIGVGETWIDTHCBHIGVLISTCOLATTRS}HIGVLISTATTRIBUTEListBox在界面显示的行数RowNumListBoxListBox的内部焦点切换。ListBox内部焦点分颜色,对应ListBox的字段索引等。为了区分内部焦点和非焦点区域,要设置焦点的皮肤,包括ListBox获得界面焦点时的rowselectskin皮肤和ListBox未获得界面焦点时的rownormalskin皮肤。内部焦点切换事件onselectHIGVMSGITEMSELECT,当内部焦点变化oncellselectHIGVMSGLISTBOXCELLSEL,当焦点被按ondatachangeHIGVMSGDATACHANGE,同步数据时发Xml属性iscellactive=”yes”可设置单元格焦点模式,接口创建须设置IsCellActive。单取函数GetWidthCb如下:typedefHIS32(*HIGVGETWIDTHCB)(HIHANDLEhList,HIU32Item,HI该回调函数在ListBox同步数据时调用,调用次数为ListBox的总列数乘以总行数。每GetWidthCb函数,用户以返回值回馈希望设置的单元格宽度。返回值的取值范围是0~100,意为占总行的百分比,0表示隐藏单元格,100表示该单元格占满整果返回值不在0~100范围内,该单元格宽度使用前一次的值。onkeydown事件中通过接收按键调用接口设置。因为宽度元格上。也可以设置AutoSwitchCell让HiGV内部处理焦点切换。ListBox提供了单元格内设置小图标作为标记的功能。在很多场景中,ListBox的某个图片。这些图片的资源句柄也是通过ADM获取的。将列属性的类型设置为LISTCOLTYPETXTICONLEFTLISTCOLTYPETXTICONRIGHT,Fgidx用a|texticonADMiconXML isreleaseid"testlistbox01"top"20"left"20"width"200"normalskin"blackskin" activeskin"buttondefault"transparent"no"iscellactive"no"widgetposmirror"yes"widgetinteriormirror"yes"oncellselect"listboxcellselect"rownum"5"colnumfont"commonfonttext22"datamodel"testdatamodel1"rowselectskin"commonskincomboboxrowselect"rownormalskin"commonskincomboboxrowselect"leftorderobj""rightorderobj""onkeydown"" hlineheight"1"vlinewidth"1"scrollbar"" ontimer""noframe""ongetfocus""onlostfocus""onselect"">的形式描述字段id"testlistcol01"coltype"texticonleft"colwidth"100"colbinddb"yes"fgidx""coldbindex"0|1"coldataconv的形式描述字段id"testlistcol02"coltype"texticonright"colwidth"100"colbinddb"yes"fgidx""coldbindex"2|3"coldataconvid"testfielddatasourcegetrowcountgetrowvaluecacherowsregisterdatachangeunregisterdatachange""列属性中可以注册回调函数HIGVLISTCONVCBConvString,在xml中为coldataconv属性。该回调本来是用作字符串的转换。当列表框绘制每一个单元格内容typedefHIS32(*HIGVLISTCONVCB)(HIHANDLEhList,HIU32Col,HIItem,constHICHAR*pSrcStr,HICHAR*pDstStr,HIU32当某列的数据都是同一个图片资源的时候,可以不绑定ADM字段,直接设置结构HIGVLISTCOLATTRShImage,因为此时并不依赖数据库,列表框对这种用前界面显示区域在整个需要显示的区域中的位置。ScrollBar不能获得焦点。ScrollBar的头文件为《higvscrollbar.hEdit用于编辑和显示简单字符,包括拼音、英文、数字及标点符号的编辑,不可编辑置。Edit的头文件为《higvedit.hHIGVMSGEDITINPUTENDEidt可以设置掩码风格,掩码风格和密码风格互斥。掩码风格需要设置掩码,掩表示前三个字符可以编辑,MHz为不可编辑字符。除了密码、掩码风格,Eidt还可以设置数字风格、循环风格、删除风格和只读风

HiGV字符编辑采用UTF-81-4个字节的字符编辑。常用的ASCII编码都是单字节字符,而中日韩文、阿拉伯文等复杂文字的一个字符对应2个以上字节。HiGV的编辑是以字符为单位的。口,详见《higvedit.hHIGVMSGMULTIEDITSELECTEND。MultiEdit的头文件为《higvmultiedit.hIPEditIP地址。该控件支持设置/IPIP地址检IP地址值获取;支持光标自动跳转。IPEdit的头文件为《higvipedit.hIPEdit432IP,对应每个字节对应一个IP段。如:0xFFFFFFFF表示IP55。Spin用户添加,获得焦点时左右按键可切换当前条目。Spin的头文件为《higvspin.h图4-16Spin32,条目总数为4,那么旋钮中的内容依次为3、5、7、9四个条目。HIGVSpinAddItemHIGVSpinAddItemByID为旋钮添加多语言字串ID作为内容。需要注意直接字ID只能选择一种方式,不可混合使用。Xml文件可以直接设置字串xmlHIGVSpinSetButtonImg设置旋钮的上下箭头,鼠标点击箭HIGVMSGITEMSELECT。节目播放进度等信息,ProgressBar中的格子是用图片填充的。ProgressBar头文件为《higvprogressbar.h应HIGVMSGITEMSELECT。xml中直接设置。ScrollText完成一次滚动后会产生滚动结束事件,对应HIGVMSGSTSCROLLONETIME。SmoothMoveHIGOScrolltext相似,HIHANDLEshSmoothMove1 HIGVSMOOTHMOVEINFOECreateInfo;/**Theparamisscrolltextlayer,ifhavenotscrolltextlayer,setHIGOLAYERBUTTplease*/ HIGVSmoothMoveInit(HIGOLAYERif(HISUCCESS!{return}/**Setsmoothmove HIGVSMOOTHMOVEDIRRIGHT; CreateInfo.IsScrollHITRUE; CreateInfo.FgColor0xfffff000;CreateInfo.BgColor0x0; HIGVSmoothMoveCreate((constHIGVSMOOTHMOVEINFOE*)&CreateInfo,&shSmoothMove1,"Testsmoothmove,stepis3.",HINULL);if(HI {returnHIGVSmoothMoveShow(s}HIGVSmoothMoveImageCipherImageCipher是用图片显示密码的密码框,主要是为了增加密码显示时的界面美观效的头文件为《higvimagecipher.h输入密码完成会产生事件,对应HIGVMSGICINPUTEND。Clock显示。时钟的头文件为《higvclock.hClockClock显示之前,需为Clock设置最小单位。xml创建时钟须指定属性minunit;接口创建时钟,调用HIGVClockInit初始化时钟后还须要调用当时钟是HIGVSTYLEHIDEUNLODRES风格时,在显示时创建定时器,隐藏当时钟不是HIGVSTYLEHIDEUNLODRESClock的同时会创建HIGVMSGTIMER(ontimer)事件,定时器ID为0x1001。接口HIGVClockRun控制Clock定时器的启动和停止,非HIGVSTYLEHIDEUNLODRES风格往往要先停止,显示控件时再启动。ClockClockdispmodeHIGVCLOCKMODEEDispMode;xml文件创建时为属性dispmode。

DispModeHIGVCLOCKMODETEXTHIGVWidgetSetTextHIGVWidgetSetTextByIDClock

DispModeHIGVCLOCKMODEFORMATClock设置固定的显示格式,目前只支持xml设置显示格式。显示格式通常定义在多语言xml文件中,以timefmt作为标签,将timefmt的ID作为控件的text属性。Y[MY[],<dY[N<HY[hY[mY[sY[-N<[<strset>fmt]类型表示fmt09IDstrsetstrset一定要是10个,顺序代替0到9。补全格式会显示完整的字串,缺省格式会将多余字符省略,比如“2015yyyy显示为2015而yy则显示为15”,又比如“9号用dd会显示为09而d则显示为9。 id"STRSET"STRIDMMJAN;STRIDMMFEB;STRIDMMMAR;STRIDMMAPR;STRIDMMMAY;STRIDMMJUN;STRIDMMJUL;STRIDMMAUG;STRIDMMSEP;STRIDMMOCT;STRIDMMNOV;STRIDMMDEC;" id"STRSETSHORT"STRIDMMJAN;STRIDMMFEB;STRIDMMMAR;STRIDMMAPR;STRIDMMMAY;STRIDMMJUN;STRIDMMJUL;STRIDMMAUG;STRIDMMSEP;STRIDMMOCT;STRIDMMNOV;STRIDMMDEC;" "STRSET "STRIDAMPMAM;STRIDAMPM "STRSET "STRSETDIGIT0;STRSETDIGIT1;STRSETDIGIT2;STRSETDIGIT3;STRSETDIGIT4;STRSETDIGIT5;STRSETDIGIT6;STRSETDIGIT7;STRSETDIGIT8;STRSETDIGIT9;" "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRSETDIGIT "STRIDAMPM "STRIDAMPM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDMM "STRIDWEEK "STRIDWEEK "STRIDWEEK ء "STRIDWEEK ءـر "STRIDWEEK ! "STRIDWEEK "# "STRIDWEEK $%& "STRIDWEEKSHORT "STRIDWEEKSHORT "STRIDWEEKSHORT ءـ "STRIDWEEKSHORT ءـرا" "STRIDWEEKSHORT ! "STRIDWEEKSHORT "# "STRIDWEEKSHORT $%& "STRSETSHORT "STRIDWEEKSHORTSUN;STRIDWEEKSHORTMON;STRIDWEEKSHORTTUE;STRIDWEEKSHORTWED;STRIDWEEKSHORTTHUR;STRIDWEEKSHORTFRI;STRIDWEEKSHORTS "STRSET "STRIDWEEKSUN;STRIDWEEKMON;STRIDWEEKTUE;STRIDWEEKWED;STRIDWEEKTHUR;STRIDWEEKFRI;STRIDWEEKSAT;"/> "TIMEFMT "[yyyy]-<MM>-[dd]week: "<dddd>,[dd] "TIMEFMT "<tt> "TIMEFMT "[yyyy].<MM>.[dd]week:<dddd> "[<digit>yyyy]年<MMdd]日<dddd>tt> "<dddd>,[dd]<MM>,[yyyy]<tt> "TIMEFMTSHORT "<tt> "<tt> "TIMEFMTSHORT "[yy]-<M>-[d]week: "[yy]-<M>-[d] "<ddd>,[d] "TIMEFMTSHORT "[yy].<M>.[d] "[<digit>yy]/<M>/[d]<tt> "<ddd>,[d]<M>,[yy]<tt> 时间格式 "TIMEFMT "[yyyy].<MM>.[dd]week:<dddd> "[<digit>yyyy]年<MMdd]日<dddd>tt> "<dddd>,[dd]<MM>,[yyyy]<tt> <MM>表示一到十二月,因为是strset中的MM id"STRSET"STRIDMMJAN;STRIDMMFEB;STRIDMMMAR;STRIDMMAPR;STRIDMMMAY;STRIDMMJUN;STRIDMMJUL;STRIDMMAUG;STRIDMMSEP;STRIDMMOCT;STRIDMMNOV;STRIDMMDEC;" strsetid=STRSETMONTH,这个ID并不会被使用,xml2bin工具会自动寻找MM替换尖括号中的内容。在不同的语言环境下,<MM>会被翻译成十二个月的多语言字串,如一月对应的STRIDMMJANen环境下会找到“January”,zh环境下会找到“一月”,ar环境下因为缺省会使用“January。串,strset中使用分号把每个多语言字串ID分隔开来。 "STRSET "STRIDWEEKSUN;STRIDWEEKMON;STRIDWEEKTUE;STRIDWEEKWED;STRIDWEEKTHUR;STRIDWEEKFRI;STRIDWEEKSAT;"/>[mm]表示0~59分钟,补全格式显示为“0059[s]表示0~59秒,缺省格式显示为“059境下的字符。如2015年在zh环境下会显示为“贰零壹伍”。20154715:40:05"[yyyy].<MM>.[dd]week:<dddd> [HH]:[mm]:[s]"作为en语言环境的显示格式,最后会显示为“2015.April.07week:Tuesday15:40:5。"[<digit>yy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论