duilib 实现 XML重用(item完全重合的CList)

最近做一个项目,界面库用的是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完全一致。

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

时间: 2024-08-03 18:06:35

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

Boost 解析xml——插入Item

XML格式为 <?xml version="1.0" encoding="utf-8"?> <Config> <Item name="A" desc=""> <ChildItem name="name" desc="" datatype="string">11111</ChildItem> <Child

使用 JavaScript 将 XML 转成 JSON

function xmlToJson(xml) { // Create the return object var obj = {}; if (xml.nodeType == 1) { // element // do attributes if (xml.attributes.length > 0) { obj["@attributes"] = {}; for (var j = 0; j < xml.attributes.length; j++) { var attrib

使用HTML javascript解析xml——我的毕设(二)

上回说到,我们已经得到openHab的xml格式页面,这次说我们要开始解析得到的xml了. 我使用的是Hbuilder,来利用已有APP基座打开一个webview来加载HTML页面,实现app效果. <script type="text/javascript"> $(document).ready(function() { $.ajax({ url: 'http://192.168.0.19:8080/rest/items', type: 'GET', dataType:

小学生之解析XML应用

1.什么是XML? 解析:XML:Extensible Markup Language(可扩展标记语言) HTML:HyperLink Text  Markup Language(超文本标记语言)  2. xml文件和html文件的区别? 解析:01.xml严格区分大小写,html不区分 02.xml不是编译语言,xml和html都是解释型语言 03.html语言负责显示数据,而Xml文件就是专门用来存储数据 注:如果我们在书写xml文件的时候,如果自己用的encoding="utf-8&quo

CMarkUp读写XML(转)

Fast start to XML in C++ Enough bull. You want to create XML or read and find things in XML. All you need to know about CMarkup is that it is just one object per XML document (for the API design concept see EDOM). And by the way the free firstobject

Flex中操作XML的E4X方法

用于处理 XML 的 E4X 方法 Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 ECMAScript for XML 规范定义了一组用于使用 XML 数据的类和功能.这些类和功能统称为 E4X.ActionScript 3.0 包含以下 E4X 类:XML.XMLList.QName 和 Namespace. E4X 类的方法.属性和运算符旨在实现以下目标: 简单 - 在可能的情况下,使用 E4X 可以更容易地编写和理解用于使用 XML 数据的代码. 一致

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

package { import flash.display.Sprite; /** * @author:Frost.Yen * @E-mail:[email protected] * @create: 2016-3-11 上午11:31:11 * */ public class OperateXML extends Sprite { private var _xml:XML = <data> <item>item1</item> <item>item2&l

Delphi操作XML - 冰雪傲骨

Delphi操作XMl,只要使用 NativeXml.我是用的版本是4.02.NativeXML的使用方法比较简单,但是功能很强大. XE2的话,要在simdesign.inc后面加上: // Delphi XE2 / 16 {$ifdef VER230} {$define D7UP} {$define D10UP} {$define D15UP} {$endif} 一.使用 1) Copy the NativeXml files from the NativeXml directory int

JavaScript实现XML与JSON互转代码(转载)

下面来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转json的例子,希望这些例子能给你带来帮助. 最近在开发在线XML编辑器,打算使用JSON做为中间格式.因为JSON相对于XML,有着容易阅读.解析速度快.占用空间小等优点,更易于在WEB上传递数据.但在实际使用中还是发现了一些易于忽略的细节,对于需要严格保证XML原始结构的情况,在转换成JSON时需要一些注意. XML转换成JSON的格式大概如下: //XML形式 <article> <h