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>

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

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

时间: 2024-11-10 08:31:01

CListUI控件的认识的相关文章

duilib中CListUI控件消息处理的方法与技巧

CListUI控件是duilib中比较常用.也是比较遇到问题的控件,使用CListUI可以简单的实现类似各类软件管家软件列表的样式与功能.但是CListUI使用时经常有小伙伴经常为遇到的各种小问题而头疼,下面我们重点总结一下: 常见问题: 1.如何隐藏列表头:List控件属性里面添加header="hidden"即可 2.如何调整列表文字对齐方式: List控件属性里面修改itemalign即可(List控件中列表项的属性配置都是在List属性列表进行的,只不过在普通控件属性的基础上添

Duilib教程-控件练习

一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为“btnClose”. 然后在 CHelloDuilibWnd 中重载 WindowImplBase::Notify (); 代码如下: void CHelloDuilibWnd::Notify( TNotifyUI& msg ) { if (msg.sType == DUI_MSGTYPE_CLI

2、duilib 基本控件学习

1.关于创建问题: 在创建窗口的时候 CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); MainWnd* main_wnd = new MainWnd(); main_wnd->Create(NULL, L"Demo2", UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); main_wnd->CenterWindow(); main_wnd->ShowM

duilib list控件扩展

对于简单的list控件已经有前辈分析了自带demo的ListRes全过程,duilib DirectUI库里面的一个简单的例子ListDemo, 他分析了listdemo的来龙去脉,这里我只是将个人理解的list分析一下. 由于自带的listdemo不能满足要求,所以必须个人扩展list,通过尝试 发现 1. 列表头禁止拖动情况 这种情况很简单, 配置xml的时候将 表头宽度 和 元素宽度设置相同就行了,listheader布局如下: <List name="domainlist"

duilib控件与属性说明

转自 https://blog.csdn.net/thanklife/article/details/80091826 不知不觉中使用Duilib已经两周有余了,在使用过程中遇到了很多问题,最终自己也有了一丢丢的认识见解,特记录并分享. 控件 控件及继承关系图 [Window]窗口 [Control]除Window外其他所有组件都继承自Control 布局: [Container] [VerticalLayout]垂直布局:其内元素按照竖直方式排列 [HorizontalLayout]水平布局:

在DataGridView控件中实现冻结列分界线

我们在使用Office Excel的时候,有很多时候需要冻结行或者列.这时,Excel会在冻结的行列和非冻结的区域之间绘制上一条明显的黑线.如下图: (图1) WinForm下的DataGridView控件也能实现类似的冻结行或者列的功能(参见:http://msdn.microsoft.com/zh-cn/library/28e9w2e1(VS.85).aspx) ,但是呢,DataGridView控件默认不会在冻结列或者行的分界处绘制一个明显的分界线,这样的话,最终用户很难注意到当前有列或者

摆脱Login控件,自己定义登录操作

protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { //在登录过程中,程序自动使用login.aspx进行拦截 //验证用户通过后,自动返回拦截的位置 if (Membership.ValidateUser(this.TextBox1.Text, this.TextBox2.Text)) { this.Session["xh"] = this.TextBox1.Text; FormsAuth

python selenium 处理时间日期控件(十五)

测试过程中经常遇到时间控件,需要我们来选择日期,一般处理时间控件通过层级定位来操作或者通过调用js来实现. 1.首先我们看一下如何通过层级定位来操作时间控件. 通过示例图可以看到,日期控件是无法输入日期,点击后弹出日期列表供我们选择日期,自己找了一个日期控制演示一下,通过两次定位,选择了日期 #-*- coding:utf-8 -*- import time from selenium import webdriver driver = webdriver.Chrome() driver.get

Delphi XE10 dxLayoutControl 控件应用指南

http://www.cnblogs.com/Bonny.Wong/p/7440288.html DevExpress VCL套件是一套非常强大的界面控件,可惜关于Delphi开发方面的说明太少,有些控件使用起来一头雾水,不知从何下手.本节详细介绍在Delphi Xe10 Seattle中如何利用dxLayoutControl 控件来做界面布局. 1.  首先从工具箱面板中将dxLayoutControl放在Form上,设置2个关键属性如下: 属性 属性值 说明 Align alClient 一