zoukankan      html  css  js  c++  java
  • Duilib源码分析(五)UI布局—Layout与各子控件

      接下来,继续分析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创建的工程,在整个资源解析、控件创建、控件加载与绘制,控件数据处理等管理的整个过程进行分析。

        

        

        

        

  • 相关阅读:
    BadUSB 利用
    java 将函数作为参数传递
    odoo12 修行提升篇之 常用的高阶函数 (二)
    odoo12 修行提升篇之 异步定时任务 (一)
    odoo12 修行基础篇之 利用kanban做分析 点击跳转分析模型列表 (九)
    odoo12 修行基础篇之 kanban (八)
    odoo12 修行基础篇之 记录批处理 (七)
    odoo12 修行基础篇之 列表的筛选和分组 (六)
    odoo12 修行基础篇之 添加记录编码 (五)
    odoo12 修行基础篇之 添加工作流和操作记录 (四)
  • 原文地址:https://www.cnblogs.com/haomiao/p/5046578.html
Copyright © 2011-2022 走看看