1、表头(xml)

<List name="List_records" padding="5,10,5,5" bkcolor="#FFFFFFFF" inset="0,0,0,0" bordersize="1" bordercolor="#FFD7D7D7"
itemshowhtml="true" vscrollbar="true" hscrollbar="true" itemalign="left" itemaltbk="true"
itemshowrowline="true" itemshowcolumnline="true" itemlinecolor="#FFD7D7D7">
<ListHeader height="32" bkcolor="#FFE6ECF7" bordersize="1" bordercolor="#FFD7D7D7">
<ListHeaderItem text="采集人" name="es_header_name_dbclick" width="80" minwidth="80" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="手机号码" name="es_header_username_dbclick" width="100" minwidth="100" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="证件号码" name="es_header_username_dbclick" width="160" minwidth="160" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="采集时间" name="es_header_username_dbclick" width="150" minwidth="150" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="采集人2" name="es_header_username_dbclick" width="80" minwidth="80" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="现住地" name="es_header_username_dbclick" width="180" minwidth="150" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="现住地2" name="es_header_username_dbclick" width="150" minwidth="150" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="是否同步" name="es_header_username_dbclick" width="60" minwidth="60" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<ListHeaderItem text="" name="es_header_username_dbclick" width="40" minwidth="40" align="hcentervcenter" />
<Control width="1" bkcolor="#FFD7D7D7"/>
</ListHeader>
</List>

2、item(xml)

<Window>
<ListContainerElement name="ListContainerElement_statisQuery" height="32" >

<Text name="Text_susp_name" text="" padding="1,0,0,0" width="80"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>     如果表头的列与列之间有分隔控件,则节点中列与列之间也必须有分隔控件
<Text name="Text_susp_mobile" text="" padding="1,0,0,0" width="80"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_susp_certNumber" text="" padding="1,0,0,0" width="130"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_susp_acquTime" text="" padding="1,0,0,0" width="130"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_gather_name" text="" padding="1,0,0,0" width="80"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_susp_address" text="" padding="1,0,0,0" width="150"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_susp_homeplace" text="" padding="1,0,0,0" width="150"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Text name="Text_is_up_server" text="" padding="1,0,0,0" width="60"
relativepos="0,0,100,0" mouse="false" textcolor="#FF333333" font="1" align="hleftvcenter" endellipsis="true" />
<Control width="1" bkcolor="#FFD7D7D7"/>
<Button name="btn_record_lookup" width="40" height="26" padding="0, 3, 0, 0" text="查看" font="7" align="hcentervcenter"/>
<Control width="1" bkcolor="#FFD7D7D7"/>

</ListContainerElement>
</Window>

ListContainerElement 中的第一级子控件与表头各列一一对应(标注:一定是第一级控件)。item中的width没有用处,以表头各列的宽度为准。

(3)代码中,向列表中添加节点

CDialogBuilder builder;
CListContainerElementUI* pListItem = (CListContainerElementUI*)(builder.Create(_T("xxxItem.xml"), (UINT)0));
if (pListItem != NULL)

{

  CTextUI* pText = static_cast<CTextUI*>(pListItem->FindSubControl(L"Text_susp_name"));
  pText->SetText(L"mark");

  .......

  pList->Add(pListItem);

}

(4)duilib的CList可能要修改

__super::SetPos(rc);
if (GetOwner()->GetListInfo()->nColumns > 0)
{

rc = m_rcItem;

// Adjust for inset
rc.left += m_rcInset.left;
rc.top += m_rcInset.top;
rc.right -= m_rcInset.right;
rc.bottom -= m_rcInset.bottom;

TListInfoUI *plistinfo = GetOwner()->GetListInfo();

// Determine the width of elements that are sizeable
SIZE szAvailable = { rc.right - rc.left, rc.bottom - rc.top };

for (int it2 = 0; it2 < m_items.GetSize(); it2++)
{
CControlUI* pControl = static_cast<CControlUI*>(m_items[it2]);
if (!pControl->IsVisible())
continue;
if (pControl->IsFloat())
{
SetFloatPos(it2);
continue;
}
RECT rcPadding = pControl->GetPadding();
SIZE sz = pControl->EstimateSize(szAvailable);

if (sz.cx < pControl->GetMinWidth())
sz.cx = pControl->GetMinWidth();
if (sz.cx > pControl->GetMaxWidth())
sz.cx = pControl->GetMaxWidth();

sz.cy = pControl->GetFixedHeight();
if (sz.cy == 0)
sz.cy = rc.bottom - rc.top - rcPadding.top - rcPadding.bottom;
if (sz.cy < 0)
sz.cy = 0;
if (sz.cy < pControl->GetMinHeight())
sz.cy = pControl->GetMinHeight();
if (sz.cy > pControl->GetMaxHeight())
sz.cy = pControl->GetMaxHeight();

RECT rcCtrl = { plistinfo->rcColumn[it2].left + rcPadding.left,
rc.top + rcPadding.top,
plistinfo->rcColumn[it2].right + rcPadding.left,
rc.top + sz.cy + rcPadding.top + rcPadding.bottom };
pControl->SetPos(rcCtrl);
}

}

duilib 实现列表头任意拖动的更多相关文章

  1. ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)

    1 怎样隐藏ListCtrl列表头的排序小三角形 在创建控件是加入|LVS_NOSORTHEADER风格即可. 一下是用法总结: 本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧. ...

  2. easyui datagrid 点击列表头排序出现错乱的原因

    之前我的导师,也就是带我的同事,使用datagrid,发现点击列表头排序出现乱序,按理说只有顺序和逆序两种排序结果.因为他比较忙,当时没解决,把排序禁掉了,后来又要求一定要排序,所以他交给我. 一开始 ...

  3. 隐藏 FastAdmin 列表中的拖动排序按钮

    隐藏 FastAdmin 列表中的拖动排序按钮 就是以下这个按钮,想先删除不要. 刚开始在 CMS 插件中的栏目中发现没有,以为在哪个位置中,但找到半天的 weigh 都没有找到weigh 的字眼. ...

  4. Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等

    目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...

  5. duilib进阶教程 -- 改进窗口拖动 (12)

    现在大家应该都知道caption="0,0,0,32",是指示标题栏区了吧,如果想要整个窗口都能拖动呢? 那直接把高度改成和窗口一样不就得了~O(∩_∩)O~ 嗯,这样是可以,比如 ...

  6. duilib属性列表

    <?xml version="1.0" encoding="UTF-8"?> <!-- 可能有错漏,欢迎补充.wangchyz(wangchy ...

  7. nim_duilib(15)之duilib属性列表.xml

    Note 为了更加方便查看duilib的属性(github有时候打不开),特此记录. 阅读本文,可以知道控件有哪些属性,可以写在xml文件中.个别需要结合源码一起看 from here 原文 < ...

  8. NumberSeekBar 可任意拖动和自动

    package com.example.numberseekbar; import android.content.Context; import android.content.res.Resour ...

  9. C#:ListView控件如何实现点击列表头进行排序?

    using System; using System.Collections; using System.Windows.Forms; namespace Common { /// <summa ...

随机推荐

  1. 解决Vue循环中子组件不实时更新的问题

    问题描述 使用Element-UI中的table组件时会遇到一个常见的问题.当在el-table中调用子组件的时候会出现数据更新后,子组件没有重新渲染的问题. eg:资源列表中的健康度组件. 代码如下 ...

  2. arch/manjaro linux configuration

    0. Installation SystemConfiguration: # 启动时选择第二项boot(non-free),Manjaro自带的驱动精灵会帮你安装好所需驱动,笔记本双显卡则会帮你安装b ...

  3. SPOJ ADAFIELD Ada and Field(STL的使用:set,multiset,map的迭代器)题解

    题意:n*m的方格,“0 x”表示x轴在x位置切一刀,“0 y”表示y轴在y位置切一刀,每次操作后输出当前面积最大矩形. 思路:用set分别储存x轴y轴分割的点,用multiset(可重复)储存x轴y ...

  4. 批量启动application pool

    在powershell中执行 Get-ChildItem IIS:\AppPools | where {$_.state -eq "Stopped"} | Start-WebApp ...

  5. windows 模拟用户会话创建进程

    在渗透当中,经常会碰到这样的问题.一个机器,机器上好几个用户,或者域内,想让某个机器的某个会话执行你想要执行的程序,或者中马,以当前会话来上线. 现在模拟如下的一个情况: 严格的DMZ,内网--> ...

  6. gcc 编译出现 internal compiler error: Killed

    系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断 …解决方式也很简单, 就是增加一个交换分区:       创建分区文件, 大小 2G dd if=/dev/zero of=/swapfile ...

  7. Win7下怎么设置让远程桌面连接记住密码下次登录不需再输入

    远程桌面连接功能想必大家都不会陌生吧,特别是使用VPS服务器的用户们经常会用到,为了服务器的安全每次都会把密码设置的很复制,但是这样也有一个麻烦,就是每次要桌面远程连接的时候都要输入这么复杂的密码,很 ...

  8. .net Parallel并行使用

    因项目响应过慢,代码优化空间不大,在暂时无法调整系统架构的情况下,只有使用.NET中的TPL解决一些模块耗时过多的问题.但在使用过程中也碰到了一些问题,现在把它写下来,用于备忘. 1. Paralle ...

  9. django不返回QuerySets的API

    以下的方法不会返回QuerySets,但是作用非常强大,尤其是粗体显示的方法,需要背下来. 方法名 解释 get() 获取单个对象 create() 创建对象,无需save() get_or_crea ...

  10. django模型和字段

    一个模型(model)就是一个单独的.确定的数据的信息源,包含了数据的字段和操作方法.通常,每个模型映射为一张数据库中的表. 基本的原则如下: 每个模型在Django中的存在形式为一个Python类 ...