Bolt引擎内置的元对象介绍

戚阳
2023-12-01

引擎内置的元对象介绍

      大家都知道,引擎的核心概念是对象树和元对象,所谓元对象,是不可分割的具备特定功能的UIObject,引擎核心提供了一组功能各异的元对象,使用者只需要通过这些对象的组合,就可以搭建出各式各样的界面。下面,对这些元对象做一个简单分类,并按类型进行简单说明。

      按照是否可渲染,可以分成逻辑对象和可渲染对象。逻辑对象一般用来作为占位对象、控制对象或者影响其它对象的对象(如MaskObject);显示对象一般都可以显示一定的内容,一般来说都受alphalimitrectzorder等属性的影响,都参与整个对象树的渲染过程,支持脏矩形等(实窗口对象除外)

逻辑对象包括LayoutObjectMaskObjectResizeObjectCaptionObjectNcObjectBlurObject,其余对象为可显示对象。

按照是否存在实窗口,又分为实窗口对象和非实窗口对象。实窗口对象是出于展示一些特殊功能控件(IEFlash)或者用户自己的实窗口(XMP的视频播放窗口),而专门定制的元对象。同一个对象树上面,实窗口对象的zorder要高于其它所有非实窗口对象(实窗口对象之间zorder生效)alpha通道亦不生效,焦点和taborder等也和其它对象有所不同,需要特殊对待。

实窗口对象包括RealObjectWebBrowseObjectFlashObject,其余对象为非实窗口对象

按照是否作用于对象树绑定的hostwnd,可以分成控制对象和非控制对象,控制对象主要是控制hostwnd的某些特性,比如标题区域、拖动改变大小区域、毛玻璃区域等,一般都是用来满足目前windows下桌面开发的一些常见需求

控制对象包括CaptionObjectResizeObjectNcObjectBlurObject,其余对象为非控制对象

下面,我们详细介绍下每个对象:

一、             LayoutObject 根逻辑对象

所有元对象和组合对象的根对象,是顶级的逻辑对象,本身不显示任何内容,此对象满足所有对象都具备的核心方法和属性,具备以下核心特性:

l  支持添加子对象

l  支持control(组合对象)模式

l  支持位置表达式,可以用来动态排版

l  支持visiblechildvisible

l  支持enablechildenable

l  支持zorder特性

l  支持焦点focus特性

l  支持tabordertabgroup、tabstop特性

l  支持鼠标和键盘事件等用户输入事件

l  支持元对象的核心事件,比如OnInitControlOnPosChange

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  可以指定所使用的文本渲染引擎,目前支持FreeTypeGDI(包括gdigdi+两种)

l  可以指定单行显示或者多行显示

l  可以设定行距

l  可以设置文字省略模式

l  可以设置对齐模式,包括左右对齐和上下对齐

l  可以设置背景色和前景色

l  可以设置背景是否透明,这样可以直接使用下面的图片对象作为文字背景

l  可以设置文字的阴影效果

l  可以设置文字的发光效果

l  支持多语言

五、             EditObject 编辑框对象

用以在界面上展示一段可编辑的文本,或者接受用户的输入,基于WindowsRichEdit核心,功能强大,部分情况下可以代替TextObject使用,具备以下核心特性:

l  MFCATL里面的Edit的几乎所有功能,比如插入文本、操纵选中文本、行//索引互转、剪贴板功能、滚动条功能,以及各种模式,比如密码模式、单行/多行、只读模式等等

l  支持背景透明,可以直接使用下面的图片对象作为背景

l  支持隐藏光标模式

l  支持是否处理TabReturn按键

l  支持自定义滚动条,这样可以很方便的使用引擎来实现华丽的滚动条

l  支持数字模式、密码模式等

l  支持禁用输入法,在密码模式下更有效

l  支持设置密码显示字符

l  支持设置文本颜色、背景颜色

l  支持设置视图边距,排版更强大(viewinset)

l  支持资源里面配置字体,更加方便

六、             RichEditObject 富文本对象

用以在界面上展示一段富文本内容,采用自主编写的排版引擎,功能上是EditObject的超集,接口和属性上和EditObject一致,但是有众多EditObject不具备的功能,具体来说有以下核心特性:

l  支持上述EditObject的所有特性

l  支持嵌入其它元对象,比如ImageObjectTextureObject以及实窗口对象比如FlashObject等,将引擎的元对象和组合特性发挥到极致,使得在插入gif和图片方面,RichEditObjectwindows下的RichEdit有更强大的功能

l  支持设置文本格式(charformat),相比windows下的RichEdit,有更大的自由度

l  支持设置后端的字体渲染引擎,支持freetypegdi+两种渲染引擎

l  支持富文本的复制、粘贴,支持元对象的复制、粘贴,方便扩展

l  支持超链接的显示定制,支持自定义超链接识别

七、             FillObject 颜色填充对象

用以在界面上展示指定区域的指定颜色的填充,属于矢量对象,具备以下核心特性:

l  支持多种填充模式,包括行渐变、圆形渐变和单色模式

l  起始位置和结束位置可指定表达式,关联对象自身的位置,在对象缩放时候自动跟随,方便使用

l  支持使用颜色alpha通道,并且alpha通道支持渐变

l  支持是否使用颜色alpha通道,使用alpha通道模式下,任何一个点都会使用颜色本身的alpha和对象自身的alpha叠加而来

l  起始颜色和结束颜色均可以直接接受颜色值或者资源id,可以动态设定

八、             MaskObject 蒙层对象

高级的逻辑对象,提供蒙层效果,用以控制指定子对象上的每个像素的alpha,也即是蒙层对象里面的每个像素都可以作为alpha通道,叠加到指定子对象对应的像素上面,用以生成各种特殊效果(比如圆角效果等),具备以下核心特性:

l  蒙层可以对子对象里面的 ImageObjectTextureObjectTextObjectFillObjectLineObjectRectangleObject生效,其它对象暂不支持

l  蒙层作用区域可以动态配置,并且支持表达式,和蒙层对象自身区域联动,更方便使用

l  蒙层源可以设置位图、纹理或者颜色填充三种类型,方便定制各种特殊的蒙层效果

l  蒙层源是位图时候,可以指定资源id,可以指定是否拉伸位图

l  蒙层源是颜色填充类型时候,可以像FillObject一样配置渐变类型和渐变色

l  可以指定使用蒙层源的指定通道,比如R通道或者A通道

九、             SeqImageObject 序列帧对象

高级对象,用以在界面上展示一连串的连续图片,相比其它对象,该对象本身具有帧的概念,可以动态播放一组图片,具备以下核心特性:

l  可以播放一个GIF资源(需要依赖XGP)

l  可以播放ImageSeq(XL_IMAGESEQ_HANDLE)资源,而不必依赖SeqFrameAnimation动画

l  可以设置播放间隔,控制播放更加随意

l  直接在元对象层面控制动画的播放,比如使用PlayPauseStop来控制播放,更加简洁高效

l  满足元对象的一切特性,比如剪裁limitrect、alpha通道

l  支持逆序播放、循环播放等高级

l  具备更高效率,可以同时在界面存在多个SeqImageObject

十、             CaptionObject 标题对象

直接指定界面某个区域为caption(windows窗口系统的概念),可以用来拖动所在窗口,包括双击最大化等,属于控制对象,具备以下核心特性:

l  可以指定是否是caption,用以动态打开或者关闭

l  可以像其它对象一样截获鼠标事件,来取消默认操作,比如双击最大化等

l  可以通过多个CaptionObject的组合以及和其它对象的叠加,来定制需要的caption区域,更容易使用

l  满足LayoutObject的所有特性和事件,比如limitrectenablevisible

十一、      ResizeObject 调整大小对象

直接指定界面某个区域为resize(windows窗口系统的概念),可以用来拖动改变窗口大小,属于控制对象,具备以下核心特性:

l  可以指定resize类型,包括上下左右四个方向、上左/上右/下左/下右四个角方向

l  可以指定是否是resize,用以动态打开或者关闭

l  可以通过多个ResizeObject的组合以及和其它对象的叠加,来定制需要的resize区域,更容易使用

l  满足LayoutObject的所有特性和事件,比如limitrectenablevisible

十二、      NcObject 非客户区对象

可以用来满足CaptionObjectResizeObject对象的需求,设计的主要目的是主要是用来监听所绑定的hostwndNcActivate事件,用以做专门的效果处理,具备以下核心特性:

l  通过监听OnControlHitTest事件,可以动态模拟CaptionObjectResizeObject,使用更为灵活

l  通过监听OnNcActivate事件,可以处理hostwndNcActivate事件,模拟一些特殊效果

十三、      BlurObject 毛玻璃对象

主要用来使界面呈现windows vista以及以后界面的毛玻璃效果,和引擎的元对象、hostwnd巧妙结合,从而极为简洁地实现毛玻璃效果,且更方便控制区域,具备以下核心特性:

l  支持元对象的所有核心特性

l  支持区域剪裁,支持叠加

l  可以设置是否启用TransitionOnMaximized(具体可以参考msdn相关内容),用以不同的毛玻璃效果

l  可以设置椭圆区域,方便的处理圆角等特殊情况

l  可以根据操作系统版本、是否启用复合桌面、所绑定hostwnd的情况以及应用程序的全局设置,来智能判断是否开启Blur效果

十四、      RealObject 实对象

用来在基于引擎的界面上,以窗口模式展示一个元对象,属于实窗口对象,可以设置进来一个用户自定义的GDI窗口,具备以下核心特性:

l  支持LayoutObject的绝大多数功能(由于系统限制,zorderalpha不支持)

l  可以设置一个自定义的GDI窗口(HWND)

l  支持剪裁(limitrect)

l  实窗口对象之间支持zorder

l  可以渲染当前实对象显示内容到XLBitmap,方便动画

十五、      WebBrowseObject 浏览器对象

用来在界面上展示网页内容,是非常常用的几个对象之一,采用IE内核,具备以下核心特性:

l  支持打开指定支持,支持基本的导航操作

l  支持设置自定义的external接口

l  可以直接获取IWebBrowser2接口进行操作

l  可以设置是否启用邮件菜单

l  可以设置是否禁用脚本错误

l  支持一些其它常用的方法和属性,比如获取LocationNameLocationUrl,支持DocHostFlags

l  支持常用的事件,比如NavigateComplete2NewWindow

l  支持直接截获download事件

十六、      FlashObject flash对象

用来以窗口模式展示/播放一个flash资源,需要系统安装AdobeFlash控件,属于实窗口对象,目前已经开放flash控件的核心方法和属性,具备以下核心特性:

l  加载一个flash文件

l  播放/暂停/前进/后退等核心控制

l  可以设置是否循环播放

l  可以设置是否禁用右键菜单

l  可以设置对齐模式

l  可以设置缩放模式

l  可以指定需要使用的flash控件模块

l  支持flash控件的CallFunction方法,方便和flash素材脚本交互

l  支持flashFlashVars属性,可以设置/获取flash素材变量

l  支持获取当前使用的flash版本

l  支持输出日志,方便flash素材导致的崩溃定位

十七、      WindowlessFlashObject 无窗口模式flash对象

基本功能和FlashObject相同,不同的是该对象不是以窗口模式展示,而是像ImageObjectTextureObject等可视对象的形式来展示,更贴近引擎特性,避免实窗口对象的缺点,具备以下核心特性:

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自身区域联动,更方便使用

 类似资料: