CListUI控件的认识

要学习该控件得先去看duilib的demo里面的ListDemo

ListMainForm

1、该类继承了IListCallbackUI接口,并实现了对应的LPCTSTR GetItemText(CControlUI* pControl, int iIndex, int iSubItem)回调函数。

在CListTextElementUI函数中的DrawItemText调用了该函数来获取对应的item的值。pControl 是对应的ClistLabelElementUI指针,iIndex则是对应的是该pControl在数组中对应第几行。iSubItem就是对应的第几列。

当然:如果没有使用该函数,则可以使用else strText.Assign(GetText(i));进行函数操作。如果使用else则无法对当前的数据进行diy,只能使用默认的数据。

2、CListUI 继承了CVerticalLayout,主要是为了进行对应的滚动条的操作。因为滚动条是为了用在CListBodyUI:该类保存了所有的element。并使用了Expand来判断是否将该行显示出来。这个很有利于重绘树形控件。具体重绘树形控件可以看GameDemo。

3、CListUI最主要的属性是CListBodyUI* m_pList; 实现了主要的Item操作的功能。

回到ListMainForm类

该类的List的xml控件(这里删去一些)

<List name="domainlist" menu="true">
            <ListHeader height="24" menu="true">
                <ListHeaderItem  sepwidth="1"/>
                <ListHeaderItem  sepwidth="1"/>
            </ListHeader>
View Code

这里我标注了两个地方的menu,其实只有List起作用,另外的位置不起作用。因为它的子控件均属于该大框架。当右击List范围内的时候就会响应对应的WM_CONTEXTMENU中调用CControl的DoEvent 中的UIEVENT_CONTEXTMENU 。

4、当很疑惑为什么添加一个Element的时候会马上显示。其实在Add或者erase的时候均会调用NeedUpdate.来进行相应的更新。

原文地址:https://www.cnblogs.com/cxiaoln/p/4379610.html