加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Bolt引擎内置的元对象介绍

发布时间:2020-12-15 18:44:26 所属栏目:百科 来源:网络整理
导读:引擎内置的元对象介绍 ? ? ? 大家都知道,引擎的核心概念是对象树和元对象,所谓元对象,是不可分割的具备特定功能的 UIObject ,引擎核心提供了一组功能各异的元对象,使用者只需要通过这些对象的组合,就可以搭建出各式各样的界面。 下面,对这些元对象做

引擎内置的元对象介绍

? ? ? 大家都知道,引擎的核心概念是对象树和元对象,所谓元对象,是不可分割的具备特定功能的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??满足元对象的一切特性,比如剪裁limitrectalpha通道

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??可以设置画刷XL_BRUSH_HANDLE资源,用来填充矩形内部

l??可以设定边框颜色

l??可以设定矩形的起始位置和结束位置,并且支持表达式,可以和RectangleObject自身区域联动,更方便使用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读