duilib中list的使用方法

来源:赵克立博客 分类: DuiLib 标签:duilib发布时间:2018-11-22 14:34:40最后更新:2018-11-22 15:16:34浏览:3975
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2018-11-22 15:16:34
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

首先xml中定义一个list标签

<VerticalLayout text="列表" bordersize="1" inset="2,2,2,2" bordercolor="#0057C0FF">
    <List name="iplist" bkcolor="#FFFFFFFF" inset="0,0,0,0" itemshowhtml="true" vscrollbar="true" hscrollbar="true" headerbkimage="file='list_header_bg.png'" itemalign="center" itembkcolor="#FFFFFFFF" itemaltbk="true" hscrollbar="true" menu="true">
        <ListHeader>
            <ListHeaderItem font="1" text="IP" minwidth="100" hotimage="file='list_header_hot.png'" pushedimage="file='list_header_pushed.png'" sepimage="file='list_header_sep.png'" sepwidth="3" />
            <ListHeaderItem font="1" text="端口" maxwidth="50" hotimage="file='list_header_hot.png'" pushedimage="file='list_header_pushed.png'" sepimage="file='list_header_sep.png'" sepwidth="1" />
            <ListHeaderItem font="1" text="用户名" hotimage="file='list_header_hot.png'" pushedimage="file='list_header_pushed.png'" sepimage="file='list_header_sep.png'" sepwidth="2" />
        </ListHeader>
    </List>
</VerticalLayout>

列设置完后就是用c++代码往里面添加添加内容啦,往里面添加元素需要使用CListContainerElementUI 这个容器类,每一个列表项都是一个CListContainerElementUI的实例,

第一种

使用自定义xml文件来描述每个列表项的结构如下

//第一种
CDialogBuilder builder;
CListContainerElementUI *pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("listitem.xml"), 0, NULL, &m_pm, NULL));
pEle->SetMinHeight(60);
CLabelUI *pLab = static_cast<CLabelUI *>(pEle->FindSubControl(_T("number_lab")));
pLab->SetText(_T("11"));
if (!m_pIplist)
{
    m_pIplist->Add(pEle);
}

listitem.xml格式如下

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Window>
    <ListContainerElement  height="30" bordercolor="#ffcccccc">
        <HorizontalLayout>
            <Label name="listmem2" text="222" align="center" float="true" bkcolor="#FFFFFFFF" pos="17,7,0,0" width="51" height="15" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" />
        </HorizontalLayout>
        <HorizontalLayout>
            <Label name="listmem2" text="222" align="center" float="true" bkcolor="#FFFFFFFF" pos="17,7,0,0" width="51" height="15" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" />
        </HorizontalLayout>
        <HorizontalLayout>
            <Label name="listmem2" text="222" align="center" float="true" bkcolor="#FFFFFFFF" pos="17,7,0,0" width="51" height="15" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" />
        </HorizontalLayout>
    </ListContainerElement>
</Window>


第二种

直接动态的创建元素来填充,有多少列就创建多少个hor容器元素如下三列数据

//第二种
CListContainerElementUI* el = new CListContainerElementUI();
el->SetTag(i);
el->SetFixedHeight(30);
CHorizontalLayoutUI* hr1 = new CHorizontalLayoutUI;
CHorizontalLayoutUI* hr2 = new CHorizontalLayoutUI;
CHorizontalLayoutUI* hr3 = new CHorizontalLayoutUI;
CLabelUI* la1 = new CLabelUI;
CLabelUI* la2 = new CLabelUI;
CLabelUI* la3 = new CLabelUI;
la1->SetAttribute(_T("align"), _T("center"));
la2->SetAttribute(_T("align"), _T("center"));
la3->SetAttribute(_T("align"), _T("center"));
la1->SetText(hs[i].host);
la2->SetText(hs[i].port);
la3->SetText(hs[i].account);
hr1->Add(la1);
hr2->Add(la2);
hr3->Add(la3);
el->Add(hr1);
el->Add(hr2);
el->Add(hr3);
m_pIplist->Add(el);

事件处理

单击列表后会触发 itemselect  事件,然后可以在这个事件里取列表中当前选中项的索引,有啦索引就可以进行相关处理如下,

//判断事件发送者是不是当前列表
if (msg.pSender == m_pIplist) {
    int index = m_pIplist->GetCurSel();
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python