最近做一个项目,界面库用的是duilib。

软件首页的左侧是一个机型列表,右侧是机型信息及其他信息,点击左侧的机型,右边跟着变为对应的信息。

由于右侧信息比较复杂,还有进度条什么的,所以如果右侧只用一个界面,切换机型时,缓存和重新填充这些信息非常麻烦。

所以就想到了,右侧使用与左侧机型一样多的界面,每个机型对应一个界面。左侧切换机型时,右侧只显示其对应的界面,其他界面隐藏。

但右侧的界面完全一致,即XML完全一致,且左侧机型数量不确定,不可能使用TabLayout控件。

并且如果一个XML被多次include,控件name重复,会导致右侧的所有界面都显示不了。

最终考虑使用CList,只不过这个list的所有item的位置是一样的,即item都完全重合在一起。

具体做法是:从CList派生一个CMyList,然后重写SetPos函数,

关键代码:

void CMyList::SetPos(RECT rc)

{

  CVerticalLayoutUI::SetPos(rc);

  for (int it2 = 0; it2 < m_items.GetSize(); it2++)

  {

    CControlUI* pControl = static_cast<CControlUI*>(m_items[it2]);

    if(pControl) pControl->SetPos(m_rcItem);

  }

}

CMainWnd::CreateControl 函数中添加:

if (_tcscmp(pstrClass, _T("MyList")) == 0)
{
pControl = new CMyList;
}

在切换界面时,只显示CMyList对应的ITEM,其他item隐藏;

其他用法与CList完全一致。

如此以来,界面处理上简易了非常多,切换界面时不用去考虑界面上控件的内容,不用缓存,不用重新设置。。。

duilib 实现 XML重用(item完全重合的CList)的更多相关文章

  1. Boost 解析xml——插入Item

    XML格式为 <?xml version="1.0" encoding="utf-8"?> <Config> <Item name ...

  2. 对javaweb项目中web.xml重用配置的理解(个人学习小结)

    <!-- 所有的总结描述性与语言都在注释中 --><?xml version="1.0" encoding="UTF-8"?> < ...

  3. DuiLib(二)——控件创建

    上一篇讲了窗口及消息,了解了大体的程序框架.这一篇说的是控件的创建. duilib支持XML配置文件,即根据XML创建窗口及控件,将界面与逻辑分开,便于修改及维护.上一篇的示例中可以看到在消息WM_C ...

  4. js压缩xml字符串,将xml字符串转换为xml对象,将xml对象转换为json对象

    /** * 压缩xml字符串 */ function compressXmlStr(str){ var prefix, suffix; var i = str.indexOf("\r&quo ...

  5. php总结 --- 10. xml操作

    xml 和array互换 /** * 数组编码为XML * @param array $data 数据 * @return mixed 编码后数据 */ function xmlencode($dat ...

  6. 第八章xml学习

    1.ASP.NET和JSP的关系 ASP.NET 和JSP都是用来开发动态网站的技术,只不过ASP.NET是通过c#语言来操作的, 而JSP是通过Java语言来操作的. 2.为什么学习XML? 01. ...

  7. 160928、JQuery解析XML数据的demo

    用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 方案1 当后台返回的数据类型是xml对象 ...

  8. [ActionScript 3.0] AS3.0 生成xml方法之一

    var type:Array = ["type0", "type1", "type2"]; var property:Array = [[& ...

  9. [ActionScript 3.0] AS3 对XML的操作,创建、删除、增加节点方法

    package { import flash.display.Sprite; /** * @author:Frost.Yen * @E-mail:871979853@qq.com * @create: ...

随机推荐

  1. oracle、Mysql数据库客户端DbVisualizer安装

    原文链接:https://jingyan.baidu.com/article/454316ab675302f7a7c03a9e.html

  2. numpy.random.randn()与rand()的区别【转】

    本文转载自:https://blog.csdn.net/u010758410/article/details/71799142 numpy中有一些常用的用来产生随机数的函数,randn()和rand( ...

  3. linux 安装MySql 5.7.20

    1.下载文件(https://pan.baidu.com/s/1c1VBcHy)放到目录:/usr/local/ 2.解压 cd /usr/local/ tar -zxvf mysql-5.7.20- ...

  4. 如何将一个Winform嵌入到一个Control当中

    /// <summary> /// 将一个winform窗体嵌入control中 /// </summary> /// <param name="f" ...

  5. hdu 2586 How far away ? 倍增求LCA

    倍增求LCA LCA函数返回(u,v)两点的最近公共祖先 #include <bits/stdc++.h> using namespace std; *; struct node { in ...

  6. Facebook广告API系列 1

    Facebook广告API系列 1 前言 最近遇到大坑了,居然要去对接facebook的广告API,之前以为是跟鹅厂一样的API体系,看了半天Facebook的文档,冷汗直冒.... 这得一点一点的讲 ...

  7. 12_Python操作MySQL(basic)

    """ Test connection to MySQL using mysql-client conn = MySQLdb.connect(host,port,user ...

  8. React Native 的组件之底部导航栏 TabBarIOS(一)

    import React,{Component}from 'react'; import { AppRegistry, StyleSheet, Text, View, TabBarIOS, } fro ...

  9. DEV-C++设置C++11标准

    DEV-C++默认的标准是C++98,改成C++11的方法如下: Tools -> Compiler Options -> Setting -> Code Generation -& ...

  10. Python day21模块介绍4(logging模块,configparser模块)

    1.日志等级从上往下依次降低 logging.basicConfig(#日志报错打印的基础配置 level=logging.DEBUG, filename="logger.log" ...