- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一点Duilib编程总结1.duilib简介duilib是一个开源的DirectUI界面库,简洁但是功能强大。而且还是BSD的license,所以即便是在商业上,大家也可以安心使用。现在大家可以从这个网站获取到他们所有的源码:/p/duilib/为了让我们能更简单的了解其机制,我们按照如下顺序一步一步的来对他进行观察:工具库:用于支撑整个项目的基础控件库:这是dui最关键的部分之一,相信也是大家最关注的部分之一,另外这里也来看看它是如何管理这些控件的消息流转:有了控件库,我们需要将Windows窗口的原生消息流转给这些控件,另外在这里也来看看Focus,Capture等等的实现资源组织和皮肤加载:有了上面所有的这些,我们再来看看它是如何自动创建皮肤的简单使用:最后,来看看到底要如何使用它以下是duilib工程带的一副总体设计图,在看代码之前看看这幅图,对看代码会很有帮助。duilib:2.工具库由于duilib没有对外部的任何库进行依赖,所以在其内部实现了很多用于支撑项目的基础类,这些类分布在Util文件夹中:UI相关:CPoint/CSize/CDuiRect简单容器:CStdPtrArray/CStdValArray/CStdString/CStdStringPtrMap上面这些类看名字就基本能够理解其具体的含义了,当然除了基本的基础库,还有一些和窗口使用相关的工具的封装:窗口工具:WindowImplBase,这个工具我们在这里不详述,后面会再次提到。3.控件库控件库在duilib的实现中被分为了两块:Core和Control:Core中包含的是所有控件公用的部分,里面主要是一些基类和绘制的封装。Control中包含的就是各个不同的控件的行为了。Core部分和控件相关的类图非常简单:duilib-core:3.1.控件基类:CControlUICControlUI在整个控件体系中非常重要,它是所有控件的基类,也是组成控件树的基本元素,控件树中所有的节点都是一个CControlUI。他基本包括了所有控件公共的属性,如:位置,大小,颜色,是否有焦点,是否被启用,等等等等。当然这个类中还提供了非常多的基础函数,用于重载来实现子控件,如获取控件名称和ClassName,是否显示,等等等等。另外为了方便从XML中直接解析出控件的各个属性,这个类中还在提供了一个SetAttribute的方法,传入字符串的属性名称和值对特定的属性进行设置,内部其实就是挨个比较字符串去完成的,所以平时使用的时候就还是不要使用的比较好了,因为每个属性实际上都有特定的方法来获取和设置。另外每个控件中还有几个事件管理的对象——CEventSource,这些对象会在特定的时机被触发,如OnInit,调用其中保存的各个回调函数。3.1.1.控件类型转换这里我们就碰到一个问题,控件树中的每一个节点都是CControlUI,但是其实这些节点可能是文字,可能是图像,也有可能是列表,那么他怎么在这些控件指针之间进行转换呢?强制转型不是一个好的选择,duilib中使用的是CControlUI::GetInterface,传入一个字符串,传出指向控件的指针。类似于COM的QueryInterface。LPVOIDCControlUI::GetInterface(LPCTSTRpstrName){if(_tcscmp(pstrName,_T(Control))==0)returnthis;returnNULL;}3.2.容器基类:CContainerUI有了基本的控件基类之后,我们就需要容器来将他管理起来,这个容器就是CContainerUI,其内部用一个数组来保存所有的CControlUI的对象,后续的所有工作,就都是基于这个对象来进行的了。这样在CContainerUI里面,主要实现了一下几个功能:子控件的查找:CContainerUI::FindControl子控件的生命周期管理:是否销毁(在Remove的时候自动销毁)/是否延迟销毁(交给CPaintMangerUI去一起销毁)。滚动条:所有的容器都支持滚动条,在其内部会对键盘和鼠标滚轮事件进行处理(CContainerUI::DoEvent),对其内部所有的元素调整位置,最后在绘制的时候实现滚动的效果绘制:由于容器中有很多元素,所以为了加快容器的绘制,绘制的时候会获取其真正需要绘制的区域,如果子控件不在此区域中,那么就不予绘制了3.3.控件实现有了普通的基类和容器的基类之后,我们就可以在其之上搭建控件了。其类图大致如下:duilib-control:3.3.1.基本控件duilib实现了非常多的基本控件,他们分布在Control文件夹下,每一个头文件就是一个控件,主要有:CLabelUI/CTextUI/CEditU
您可能关注的文档
最近下载
- 2025年卫生高级职称面审答辩(呼吸内科)在线题库及答案(副高面审).docx VIP
- 历年试题--高等代数历年试--高等代数历年试题--高等代数历年试题--高等代数.doc VIP
- 复件 文言文名词用做动词课件.ppt VIP
- 大学生职业生涯规划.pdf VIP
- 电子科技大学《计算机编译原理)》20春期末考试.docx VIP
- 2025年水利水电工程施工企业安管人员考试(项目负责人B类)综合练习题及答案.docx VIP
- T_CECA-G 0025—2019_分布式太阳能光伏发电系统运行管理维护通则.pdf
- 稀土磁性材料.ppt VIP
- Geneapper ID-X使用.ppt VIP
- 新15J709 防火门、窗及卷帘.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)