duilib中list的使用方法
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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(); }