Duilib初探.pptx

上传人:hyn****60 文档编号:71377604 上传时间:2023-02-03 格式:PPTX 页数:16 大小:854.12KB
返回 下载 相关 举报
Duilib初探.pptx_第1页
第1页 / 共16页
Duilib初探.pptx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《Duilib初探.pptx》由会员分享,可在线阅读,更多相关《Duilib初探.pptx(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Duilib初探初探DUI介绍DirectUI 取名自微软的一个窗口类名“DirectUIHWND”,意为Paintonparentdcdirectly。即子窗口不以窗口句柄的形式创建,只是逻辑上的窗口,绘制在父窗口之上.DUI不使用Win32标准控件,所有的控件都是使用GDI函数绘制在窗口上的.所有的对控件的绘制,以及消息消息向控件的路由,都由DUI库的开发者自己实现.介绍DUI的网站:http:/www.viksoe.dk/code/windowless1.htmDUI的现状国内主流软件公司基本都在使用,腾讯,迅雷等.著名的有迅雷的BOLT引擎.有纯商业的界面库,如UIPower,价格不菲

2、.WPF,QT和Android开发里面都植入了DUI的理念,可以说,DUI已经是当前界面开发的隐形标准.DUI相对于传统Windows控件的优势:表现能力更强大,能做出更好的界面,定制性更好,也正符合国内软件商追求界面酷炫的目标.Duilib是一款开源的DUI界面库,小而全.Duilib开发的客户端Duilib开发的客户端(Demo)Duilib介绍网址:https:/ 使用xml描述界面风格 XML语法简单,易于学习 和掌握 支持改变皮肤色调 支持大多数控件透明,包括子窗口透明 支持png,bitmap,gif,ico图片格式。支持带透明通道的png图片遵循BSD协议Duilib目前支持Wi

3、ndows32、WindowCE、Mobile等平台Duilib的整体设计图Duilib类库层次工具库:一些基础类定义1,UI相关:CPoint/CSize/CDuiRect;2,简单容器:CStdPtrArray/CStdValArray/CStdString/CStdStringPtrMap,3,对窗口的封装:WindowImplBase.由于以上类的存在,使得Duilib基本自给自足,不依赖其他其他库.控件库:两个主要控件基类CControlUI,是各个控件的基类,如Button,Label等.CContainerUI,是各个容器的基类,如Layout,List等.核心库:xml解析,控

4、件绘制,消息路由,窗口过程等Duilib的消息流程消息流程的主循环是:CPaintManagerUI:MessageLoop首先创建窗口,CWindowWnd:Create,Create里面会把窗口对象的指针同窗口句柄绑定起来.WindowImplBase:HandleMessage,用户自己实现的窗口过程.这里会调用CPaintManager的MessageHandler函数,这个函数实现了大部分消息的默认处理,完成了所有控件的绘制,界面的更新.Event:Duilib会把消息封装成Event,通知给各个控件.Notify:如果想在窗口类中处理一些控件消息,就可以调用这个函数,让控件通知窗口

5、.窗口类会在OnCreate时把自己注册到接收Notify的队列里面.按钮点击动作的完成CPaintManager:MessageLoopWM_LBUTTONDOWN的处理.FindControl(pt);查找当前鼠标位置的叶节点控件,递归操作.pControl-Event(event);控件对消息进行相应的函数,这里Button会把自己设置成pushed状态m_pEventClick=pControl;/PaintManager会把该控件记录为当前被点击的WM_LBUTTONUP的处理,调用m_pEventClick的Event函数,响应鼠标左键弹起的消息在这里会通过SendNotify这个

6、函数,把Button自己被点击过的消息发送给主窗口,主窗口进行响应.以上过程,基本是对Windows消息路由的模拟XML的解析/控件的创建CMarkup库解析xml文件,生成节点树递归地处理各个节点,生成DUI对象.DUI对象生成顺序:1,全局资源,如Image,Font等2,Window的属性3,各个顶级控件,典型的是一个Layout4,对各个控件递归地构造其子控件对象.DUI控件属性的设置:1,首先对控件施用Default属性2,如果控件对于某个属性定义了自己的值,那么就更新一下此属性.比如Font属性.控件的绘制Duilib控件的绘制底层依赖的是一些GDI绘图函数.CRenderClip

7、:(圆角)矩形裁剪,为了是把控件限定在父控件的内部.CRenderEngine(封装GDI)控件的绘制CPaintManager:MessageLoop处理WM_PAINT消息调用Root(Ccontainer类型)控件的DoPaint函数CContainerUI类型的DoPaint会首先绘制绘制自己,然后调用各个子控件的绘制CControlUI类型没有控件,DoPaint函数里面会调用一些自己的私有函数,根据控件目前的状态,完成绘制功能.绘制顺序:PaintBkColor-PaintBkImage-PaintStatusImage-PaintText-PaintBorder上面的几个函数,底

8、层就是封装得CRenderEngine里面的函数了.Duilib和多线程Duilib对多线程支持不好,如果想在线程里面更新其他线程里面的窗口,需要向窗口发送自定义消息.窗口是在线程内创建的没有问题.可以对所有资源加锁,不过不太现实.Duilib对html的支持支持一些很简单的语法,如text这样的形式.如果想对全部html进行支持,有几个可选的方案:IWebbrowser2控件(利用IE控件展示html)ChromeEmbedded框架(Chrome展示html的框架)AppJS(ChromeEmbedded+NodeJs)QQ电脑管家是DUI+HTML的组合对HTML的全面支持,使得客户端UI编程转变成了Web前端编程.谢谢!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com