接下来,继续分析duilib之UI布局Layout,目前提供的布局有:VerticalLayout、HorizontalLayout、TileLayout、TabLayout、ChildLayout分别为垂直布局、水平布局、平铺布局、TAB布局、子窗体布局;

  一般项目中用得比较多的是垂直布局、水平布局,我们将分别分析各布局;

  VerticalLayout:垂直布局,继承于CContainerUI容器UI类;而CContainerUI也继承于CControlUI,故VerticalLayout实际上也是一种UI控件;

    成员函数:

    GetClass:获取类名称(VerticalLayoutUI);

    GetInterface:获取类名下的类对象;

    GetControlFlags:获取控件标记;

    SetSepHeight/GetSepHeight:设置/获取分割符高度;

    SetSepImmMode/IsSepImmMode:设置/获取当前拖动分隔符时,是否立即改变大小;

    SetAttribute:设置指定名称的属性值;

    DoEvent:事件处理函数(主要处理鼠标事件的操作);

    SetPos:设置位置,调整控件位置以及滚动条;

    DoPostPaint:绘制事件,用以绘制容器分割区域颜色为0xAA000000;

    GetThumbRect:获取分割区域;

    成员变量:

    m_iSepHeight:分隔符高度;

    m_uButtonState:按钮(控件)状态;

    ptLastMouse:鼠标最近一次所在位置;

    m_rcNewPos:控件区域位置;

    m_bImmMode:是否为立即模式(立即改变大小);

  HorizontalLayout:水平布局,继承于CContainerUI容器UI类;HorizontalLayout实际上也是一种UI控件;

    成员函数与变量,功能描述基本上与VerticalLayout相同,只是接口SetSepWidth/GetSepWidth:设置/获取分割符宽度,另外处理DoEvent内部处理事件不同;

  TileLayout:平铺布局,继承于CContainerUI容器UI类;TileLayout实际上也是一种UI控件;

    成员函数:

    GetClass:获取类名称(VerticalLayoutUI);

    GetInterface:获取类名下的类对象;

    SetAttribute:设置指定名称的属性值;

    SetPos:设置位置,调整控件位置以及滚动条;

    SetItemSize/GetItemSize: 设置/获取项目大小;

    SetColumns/GetColumns:设置/获取列数(实时上也可由区域大小的宽度与项目大小的宽度比值得到的列数);

    成员变量:

    m_szItem:单个项目大小;

    m_nColumns:平铺项目时的列数;

  TabLayout:平铺布局,继承于CContainerUI容器UI类;TabLayout实际上也是一种UI控件;

    成员函数:

    GetClass:获取类名称(VerticalLayoutUI);

    GetInterface:获取类名下的类对象;

    SetAttribute:设置指定名称的属性值;

    SetPos:设置位置,调整控件位置以及滚动条;

    Add/AddAt:添加控件,或在指定位置添加控件;

    Remove:移除某个指定的控件;

    RemoveAll:移除所有的容器控件;

    GetCurSel:获取当前控件索引;

    SelectItem:以及重载版本,皆为选择指定的控件;

    成员变量:

    m_iCurSel:当前控件索引;

  CChildLayoutUI子控件布局,继承于CContainerUI容器UI类;CChildLayoutUI实际上也是一种UI控件;

     成员函数:

    SetChildLayoutXML/GetChildLayoutXML:设置/获取子控件XML文件名m_pstrXMLFile;

    SetAttribute:设置指定名称的属性值,当为xmlfile时,则设置子控件布局xml文件名;

    GetClass:获取类名称(CChildLayoutUI);

    GetInterface:获取类名下的类对象;

    Init:若存在子控件xml文件,则加载并创建子控件树,并添加至本类对象容器,若创建控件失败,则移除所有容器内控件 (此做法个人觉得欠妥,因加载无效文件也会被清空早期的控件);

    成员变量:

    m_pstrXMLFile:子控件xml文件名;

  基本上这个几个布局控件增加的接口并不多,主要提供一个控件容器和简单的布局控制;

  此外以下18个控件继承关系如下:

    CListUI继承于CVerticalLayoutUI,

    CComboUI继承于CContainerUI,

    CScrollBarUI继承于CControlUI,

    CTreeViewUI继承于CListUI,

    CLabelUI继承于CControlUI,

    CTextUI继承于CLabelUI,

    CEditUI继承于CLabelUI,

    CButtonUI继承于CLabelUI,

    COptionUI继承于CButtonUI,

    CCheckBoxUI继承于COptionUI,

    CProgressUI继承于CLabelUI,

    CSliderUI继承于CProgressUI,

    CComboBoxUI继承于CComboUI,

    CRichEditUI继承于CContainerUI,

    CDateTimeUI继承于CLabelUI,

    CActiveXUI继承于CControlUI,

    CWebBrowserUI继承于CActiveXUI,

    CFlashUI继承于CActiveXUI。

    每个控件实现自己独有的绘制、数据处理、响应方式,因比较繁琐,暂逐个不深入分析,后面可能会针对某些控件分析;

  接下来,将通过实际的举例分析,duilib创建的工程,在整个资源解析、控件创建、控件加载与绘制,控件数据处理等管理的整个过程进行分析。

    

    

    

    

Duilib源码分析(五)UI布局—Layout与各子控件的更多相关文章

  1. Duilib源码分析(六)整体流程

    在<Duilib源码分析(一)整体框架>.<Duilib源码分析(二)控件构造器—CDialogBuilder>以及<Duilib源码分析(三)XML解析器—CMarku ...

  2. Duilib源码分析(一)整体框架

    Duilib界面库是一款由杭州月牙儿网络技术有限公司开发的界面开源库,以viksoe项目下的UiLib库的基础上开发(此后也将对UiLib库进行源码分析):通过XML布局界面,将用户界面和处理逻辑彻底 ...

  3. Vue系列---理解Vue.nextTick使用及源码分析(五)

    _ 阅读目录 一. 什么是Vue.nextTick()? 二. Vue.nextTick()方法的应用场景有哪些? 2.1 更改数据后,进行节点DOM操作. 2.2 在created生命周期中进行DO ...

  4. Duilib源码分析(四)绘制管理器—CPaintManagerUI

    接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...

  5. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  6. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  7. ABP源码分析五:ABP初始化全过程

    ABP在初始化阶段做了哪些操作,前面的四篇文章大致描述了一下. 为个更清楚的描述其脉络,做了张流程图以辅助说明.其中每一步都涉及很多细节,难以在一张图中全部表现出来.每一步的细节(会涉及到较多接口,类 ...

  8. MPTCP 源码分析(五) 接收端窗口值

    简述:      在TCP协议中影响数据发送的三个因素分别为:发送端窗口值.接收端窗口值和拥塞窗口值. 本文主要分析MPTCP中各个子路径对接收端窗口值rcv_wnd的处理.   接收端窗口值的初始化 ...

  9. vuex 源码分析(五) action 详解

    action类似于mutation,不同的是Action提交的是mutation,而不是直接变更状态,而且action里可以包含任意异步操作,每个mutation的参数1是一个对象,可以包含如下六个属 ...

随机推荐

  1. Win7硬盘整数分区一览表

    10G=10245 MB 20G=20482 MB 30G=30726 MB 40G=40963 MB 50G=51208 MB 60G=61444 MB 70G=71681 MB 80G=81926 ...

  2. C#编写window服务,一步一步(1)

    Window服务是啥,这里就不废话了,如何用在哪里用也不废话了,这里我这篇文章只是详述了我在vs2012中创建window服务的经过,希望对你有所帮助. 另外:我在编写服务过程中参考了 Profess ...

  3. juery学习总结(一)——juery选择器

    juery在工作中经常使用,遇到不会的问题往往百度一下,事后就忘.使用到现在也感觉不到有什么提高,为了每天进步一点点,从今天起抽时间记录下对juery的学习. 学习之前,首先要了解什么是网页元素,网页 ...

  4. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  5. html5 第一天

    html4与html5的琐碎比较,不全,第一次写,望多多包涵. 一 兼容性:html5在老版本的浏览器上也可以运行 二 实用性:HYML5都是封装的简单使用功能 三非革命性的发展 Html5向前兼容, ...

  6. ecshop后台新功能权限的添加

    1.在后台“推荐管理”里添加“推荐人分成”.“会员分成”两个操作功能以及权限    index.php?act=menu    incluedes/inc_priv.php:权限对照表.inc_men ...

  7. python+paramiko库+svn写的自动化部署脚本

    第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...

  8. EXCEL 2010学习笔记 —— 数据透视表

    今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...

  9. maven实战(04)_在pom中使用properties

    使用常量不仅让代码变得简洁,更重要的是可以避免重复,在需要更改的时候,只需要修改一处,降低了错误发生的概率. <project> <modelVersion>4.0.0< ...

  10. WinForm各种API---时时更新

    好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3       0 0     本文原文地址:http://www.cnblogs.com/hqxc/p/6160685.html 徐淳 [D ...