Bolt引擎内置的元对象介绍
引擎内置的元对象介绍? ? ? 大家都知道,引擎的核心概念是对象树和元对象,所谓元对象,是不可分割的具备特定功能的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??可以设置画刷XL_BRUSH_HANDLE资源,用来填充矩形内部 l??可以设定边框颜色 l??可以设定矩形的起始位置和结束位置,并且支持表达式,可以和RectangleObject自身区域联动,更方便使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |