🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
##### 当前位置: [BOLT界面引擎](#) > [知识库文章](#) > 引擎内置的元对象介绍 ### 引擎内置的元对象介绍 ##### 作者:李亚星 2012-03-16 **引擎内置的元对象介绍**** **   大家都知道,引擎的核心概念是对象树和元对象,所谓元对象,是不可分割的具备特定功能的UIObject,引擎核心提供了一组功能各异的元对象,使用者只需要通过这些对象的组合,就可以搭建出各式各样的界面。下面,对这些元对象做一个简单分类,并按类型进行简单说明。   ²  按照是否可渲染,可以分成逻辑对象和可渲染对象。逻辑对象一般用来作为占位对象、控制对象或者影响其它对象的对象(如MaskObject);显示对象一般都可以显示一定的内容,一般来说都受alpha、limitrect、zorder等属性的影响,都参与整个对象树的渲染过程,支持脏矩形等(实窗口对象除外)   逻辑对象包括LayoutObject、MaskObject、ResizeObject、CaptionObject、NcObject、BlurObject,其余对象为可显示对象。          ²  按照是否存在实窗口,又分为实窗口对象和非实窗口对象。实窗口对象是出于展示一些特殊功能控件(如IE、Flash)或者用户自己的实窗口(如XMP的视频播放窗口),而专门定制的元对象。同一个对象树上面,实窗口对象的zorder要高于其它所有非实窗口对象(实窗口对象之间zorder生效),alpha通道亦不生效,焦点和taborder等也和其它对象有所不同,需要特殊对待。   实窗口对象包括RealObject、WebBrowseObject、FlashObject,其余对象为非实窗口对象   ²  按照是否作用于对象树绑定的hostwnd,可以分成控制对象和非控制对象,控制对象主要是控制hostwnd的某些特性,比如标题区域、拖动改变大小区域、毛玻璃区域等,一般都是用来满足目前windows下桌面开发的一些常见需求   控制对象包括CaptionObject、ResizeObject、NcObject、BlurObject,其余对象为非控制对象   下面,我们详细介绍下每个对象:   **一、             ****LayoutObject ****根逻辑对象 **   所有元对象和组合对象的根对象,是顶级的逻辑对象,本身不显示任何内容,此对象满足所有对象都具备的核心方法和属性,具备以下核心特性:   l  支持添加子对象 l  支持control(组合对象)模式 l  支持位置表达式,可以用来动态排版 l  支持visible和childvisible l  支持enable和childenable l  支持zorder特性 l  支持焦点focus特性 l  支持taborder、tabgroup、tabstop特性 l  支持鼠标和键盘事件等用户输入事件 l  支持元对象的核心事件,比如OnInitControl、OnPosChange等 l  支持捕获鼠标输入(capturemouse) l  支持绑定动画 l  支持使用蒙层 l  支持设置光标 l  支持限制子对象区域(limitchild) l  支持拖放   **二、             ****ImageObject****位图对象 **   用以在界面展示一张位图(设置指定的位图资源),具备以下核心特性:   l  支持设置位图资源id或者位图句柄(XL_BITMAP_HANDLE) l  支持图片透明部分hittest穿透 l  支持对齐方式 l  支持缩放,在对象大小和图片大小不一致时候使用 l  支持反走样,提供更好的缩放效果   **三、             ****TextureObject ****纹理对象 **   用以在界面展示一张纹理(纹理概念请参考相关的介绍文章),具备以下核心特性:   l  支持设置纹理资源id或者位图句柄(XL_TEXTURE_HANDLE) l  所设置的纹理资源的特性会直接反馈到TextureObject上,比如九宫纹理,平铺纹理等   **四、             ****TextObject ****文本对象 **   用以在界面展示一段文本内容,具备以下核心特性:   l  可以指定所使用的文本渲染引擎,目前支持FreeType和GDI(包括gdi和gdi+两种) l  可以指定单行显示或者多行显示 l  可以设定行距 l  可以设置文字省略模式 l  可以设置对齐模式,包括左右对齐和上下对齐 l  可以设置背景色和前景色 l  可以设置背景是否透明,这样可以直接使用下面的图片对象作为文字背景 l  可以设置文字的阴影效果 l  可以设置文字的发光效果 l  支持多语言   **五、             ****EditObject ****编辑框对象 **   用以在界面上展示一段可编辑的文本,或者接受用户的输入,基于Windows的RichEdit核心,功能强大,部分情况下可以代替TextObject使用,具备以下核心特性:   l  MFC和ATL里面的Edit的几乎所有功能,比如插入文本、操纵选中文本、行/字/索引互转、剪贴板功能、滚动条功能,以及各种模式,比如密码模式、单行/多行、只读模式等等 l  支持背景透明,可以直接使用下面的图片对象作为背景 l  支持隐藏光标模式 l  支持是否处理Tab和Return按键 l  支持自定义滚动条,这样可以很方便的使用引擎来实现华丽的滚动条 l  支持数字模式、密码模式等 l  支持禁用输入法,在密码模式下更有效 l  支持设置密码显示字符 l  支持设置文本颜色、背景颜色 l  支持设置视图边距,排版更强大(viewinset) l  支持资源里面配置字体,更加方便 **六、             ****RichEditObject ****富文本对象 **   用以在界面上展示一段富文本内容,采用自主编写的排版引擎,功能上是EditObject的超集,接口和属性上和EditObject一致,但是有众多EditObject不具备的功能,具体来说有以下核心特性: l  支持上述EditObject的所有特性 l  支持嵌入其它元对象,比如ImageObject、TextureObject以及实窗口对象比如FlashObject等,将引擎的元对象和组合特性发挥到极致,使得在插入gif和图片方面,RichEditObject比windows下的RichEdit有更强大的功能 l  支持设置文本格式(charformat),相比windows下的RichEdit,有更大的自由度 l  支持设置后端的字体渲染引擎,支持freetype和gdi+两种渲染引擎 l  支持富文本的复制、粘贴,支持元对象的复制、粘贴,方便扩展 l  支持超链接的显示定制,支持自定义超链接识别   **七、             ****FillObject ****颜色填充对象 **   用以在界面上展示指定区域的指定颜色的填充,属于矢量对象,具备以下核心特性:   l  支持多种填充模式,包括行渐变、圆形渐变和单色模式 l  起始位置和结束位置可指定表达式,关联对象自身的位置,在对象缩放时候自动跟随,方便使用 l  支持使用颜色alpha通道,并且alpha通道支持渐变 l  支持是否使用颜色alpha通道,使用alpha通道模式下,任何一个点都会使用颜色本身的alpha和对象自身的alpha叠加而来 l  起始颜色和结束颜色均可以直接接受颜色值或者资源id,可以动态设定   **八、             ****MaskObject ****蒙层对象 **   高级的逻辑对象,提供蒙层效果,用以控制指定子对象上的每个像素的alpha,也即是蒙层对象里面的每个像素都可以作为alpha通道,叠加到指定子对象对应的像素上面,用以生成各种特殊效果(比如圆角效果等),具备以下核心特性:   l  蒙层可以对子对象里面的 ImageObject、TextureObject、TextObject、FillObject、LineObject、RectangleObject生效,其它对象暂不支持 l  蒙层作用区域可以动态配置,并且支持表达式,和蒙层对象自身区域联动,更方便使用 l  蒙层源可以设置位图、纹理或者颜色填充三种类型,方便定制各种特殊的蒙层效果 l  蒙层源是位图时候,可以指定资源id,可以指定是否拉伸位图 l  蒙层源是颜色填充类型时候,可以像FillObject一样配置渐变类型和渐变色 l  可以指定使用蒙层源的指定通道,比如R通道或者A通道   **九、             ****SeqImageObject ****序列帧对象 **   高级对象,用以在界面上展示一连串的连续图片,相比其它对象,该对象本身具有帧的概念,可以动态播放一组图片,具备以下核心特性:   l  可以播放一个GIF资源(需要依赖XGP库) l  可以播放ImageSeq(XL_IMAGESEQ_HANDLE)资源,而不必依赖SeqFrameAnimation动画 l  可以设置播放间隔,控制播放更加随意 l  直接在元对象层面控制动画的播放,比如使用Play、Pause和Stop来控制播放,更加简洁高效 l  满足元对象的一切特性,比如剪裁limitrect、alpha通道 l  支持逆序播放、循环播放等高级 l  具备更高效率,可以同时在界面存在多个SeqImageObject   **十、             ****CaptionObject ****标题对象 **   直接指定界面某个区域为caption(windows窗口系统的概念),可以用来拖动所在窗口,包括双击最大化等,属于控制对象,具备以下核心特性:   l  可以指定是否是caption,用以动态打开或者关闭 l  可以像其它对象一样截获鼠标事件,来取消默认操作,比如双击最大化等 l  可以通过多个CaptionObject的组合以及和其它对象的叠加,来定制需要的caption区域,更容易使用 l  满足LayoutObject的所有特性和事件,比如limitrect,enable,visible等   **十一、      ****ResizeObject ****调整大小对象 ** 直接指定界面某个区域为resize(windows窗口系统的概念),可以用来拖动改变窗口大小,属于控制对象,具备以下核心特性:   l  可以指定resize类型,包括上下左右四个方向、上左/上右/下左/下右四个角方向 l  可以指定是否是resize,用以动态打开或者关闭 l  可以通过多个ResizeObject的组合以及和其它对象的叠加,来定制需要的resize区域,更容易使用 l  满足LayoutObject的所有特性和事件,比如limitrect,enable,visible等   **十二、      ****NcObject ****非客户区对象 **   可以用来满足CaptionObject和ResizeObject对象的需求,设计的主要目的是主要是用来监听所绑定的hostwnd的NcActivate事件,用以做专门的效果处理,具备以下核心特性:   l  通过监听OnControlHitTest事件,可以动态模拟CaptionObject和ResizeObject,使用更为灵活 l  通过监听OnNcActivate事件,可以处理hostwnd的NcActivate事件,模拟一些特殊效果   **十三、      ****BlurObject ****毛玻璃对象 **   主要用来使界面呈现windows vista以及以后界面的毛玻璃效果,和引擎的元对象、hostwnd巧妙结合,从而极为简洁地实现毛玻璃效果,且更方便控制区域,具备以下核心特性:   l  支持元对象的所有核心特性 l  支持区域剪裁,支持叠加 l  可以设置是否启用TransitionOnMaximized(具体可以参考msdn相关内容),用以不同的毛玻璃效果 l  可以设置椭圆区域,方便的处理圆角等特殊情况 l  可以根据操作系统版本、是否启用复合桌面、所绑定hostwnd的情况以及应用程序的全局设置,来智能判断是否开启Blur效果   **十四、      ****RealObject ****实对象 **   用来在基于引擎的界面上,以窗口模式展示一个元对象,属于实窗口对象,可以设置进来一个用户自定义的GDI窗口,具备以下核心特性:   l  支持LayoutObject的绝大多数功能(由于系统限制,zorder和alpha不支持) l  可以设置一个自定义的GDI窗口(HWND) l  支持剪裁(limitrect) l  实窗口对象之间支持zorder l  可以渲染当前实对象显示内容到XLBitmap,方便动画   **十五、      ****WebBrowseObject ****浏览器对象 **   用来在界面上展示网页内容,是非常常用的几个对象之一,采用IE内核,具备以下核心特性:   l  支持打开指定支持,支持基本的导航操作 l  支持设置自定义的external接口 l  可以直接获取IWebBrowser2接口进行操作 l  可以设置是否启用邮件菜单 l  可以设置是否禁用脚本错误 l  支持一些其它常用的方法和属性,比如获取LocationName和LocationUrl,支持DocHostFlags等 l  支持常用的事件,比如NavigateComplete2,NewWindow等 l  支持直接截获download事件   **十六、      ****FlashObject flash****对象 **   用来以窗口模式展示/播放一个flash资源,需要系统安装Adobe的Flash控件,属于实窗口对象,目前已经开放flash控件的核心方法和属性,具备以下核心特性:          l  加载一个flash文件 l  播放/暂停/前进/后退等核心控制 l  可以设置是否循环播放 l  可以设置是否禁用右键菜单 l  可以设置对齐模式 l  可以设置缩放模式 l  可以指定需要使用的flash控件模块 l  支持flash控件的CallFunction方法,方便和flash素材脚本交互 l  支持flash的FlashVars属性,可以设置/获取flash素材变量 l  支持获取当前使用的flash版本 l  支持输出日志,方便flash素材导致的崩溃定位   **十七、      ****WindowlessFlashObject ****无窗口模式flash****对象 **   基本功能和FlashObject相同,不同的是该对象不是以窗口模式展示,而是像ImageObject、TextureObject等可视对象的形式来展示,更贴近引擎特性,避免实窗口对象的缺点,具备以下核心特性:   l  上述的FlashObject的各种特性 l  避免实窗口对象的各种问题,满足LayoutObject的所有方法和属性 l  支持zorder特性,可以被其它非实窗口对象覆盖和剪裁 l  支持alpha特性,可以实现半透明渲染或者alpha渐变动画等 l  支持启用directdraw,提高绘制效率 l  支持fixalpha模式,修复flash控件在全透明窗口上绘制alpha通道出错的bug   **十八、      ****LineObject ****线对象 **   在界面上显示一条直线,属于矢量对象,具备以下核心特性:   l  可以直接设置画笔XL_PEN_HANDLE资源 l  支持LayoutObject的所有特性,比如支持对象alpha,支持剪裁,支持叠加,支持mask等等 l  直线绘制支持反走样 l  支持实线和虚线两种模式 l  支持设置直线颜色 l  支持设定直线的起始位置和结束位置,相当于支持画笔原点,并且支持表达式,可以和PenObject自身区域联动,更方便使用   **十九、      ****RectangleObject ****矩形对象 **   在界面上显示一个矩形框,属于矢量对象,具备以下核心特性:   l  可以设置画笔XL_PEN_HANDLE资源,故而支持实线框和虚线框两种类型,直线绘制支持反走样 l  支持LayoutObject的所有特性,比如支持对象alpha,支持剪裁,支持叠加,支持mask等等 l  可以设置画刷XL_BRUSH_HANDLE资源,用来填充矩形内部 l  可以设定边框颜色 l  可以设定矩形的起始位置和结束位置,并且支持表达式,可以和RectangleObject自身区域联动,更方便使用   迅雷公司 版权所有 Copyright 2003-2010 Thunder Inc.All Rights Reserved. 意见反馈:[xl7doc@xunlei.com](#)