转载请说明出处,谢谢~~

昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活。今天就把大致的思路和过程记录一下。首先看《任务书》:

 -----------------------------------------------------------任务书开始-------------------------------------------------------------------

任务书:

1.效果图

1.这是一个ListItem,内容可以自定义,可以由Button,Label等等组成。每一个Item都是独立的,可以产生事件,

2.New,在List尾部增加一个Item,

3.Edit:显示当前Item的Index

4.Copy是复制一个当前的Item放置在尾部

5.Delete删除一个Item.如果下方有Item,则自动替换当前Item.

6.在某个Item上双击,显示当前Item,Idex.

7.在某个Item上单击,使该Item处理焦点状态。例如





   -----------------------------------------------------------任务书结束-------------------------------------------------------------------



    一、任务分析:

    看一下这个效果图,这是类似于windows的资源管理的控件,如下图,控件的要求是可以动态的增加,删除,编辑和赋值其中的每一个子项目,而每一个子项目都是独立的,其中的内容可以自定义。

从外观上分析这个控件,形式上类似于TileLayout布局,所以我打算继承 TileLayout布局;然后从功能上,它类似于List控件,因为它拥有选中元素这种效果,而单单的TileLayout布局没有,所以还需要继承IListOwnerUI接口并且完成他的功能。做这个控件的最关键核心支持就是继承IListOwnerUI接口!

封装为了一个ListCtrl控件,其中的子项目用CListContainerElementUI独立封装为一个单独的小控件,命名为ListCtrlItemElement。

CtrlList控件的功能: 

    继承 TileLayout布局布局后,我要为这个ListCtrl控件封装好几个接口

   1.用于增加 ListCtrlItemElement元素的Add,Addat接口,用于在尾部增加或者在指定位置增加一个 ListCtrlItemElement元素。

   2.用于删除ListCtrlItemElement元素的Remove,RemoveAll接口,用于在在指定位置删除或者全部删除 ListCtrlItemElement元素。

   3. 用于复制ListCtrlItemElement元素的Copy接口。

   4.用于编辑 ListCtrlItemElement元素的Edit接口。

   5.加入滚动条功能,并且为滚动条增加渐变滚动效果。当元素过多后,就应该为控件增加滚动条,而且为了增加动感,要为滚动条增加渐变滚动(开始滚动得慢,然后逐渐变快,最后变慢停止),这个滚动速度应该设计一个数学公式来计算。

CListCtrlItemElement控件的功能:

    ListCtrlItemElement从功能上应该从CListContainerElementUI来继承,从效果图上看,应该包含3-4个子控件

    1.显示一个图片。

    2.显示图片的名字。

    3.显示图片的简介。

二、实现过程 

      首先,我先仿照效果图的样子做一个大致的窗体的外观,ListCtrl ,控件的部分先用一个白色背景图覆盖掉,大致实现图如下:



      接下来开始封装ListCtrl控件和 ListCtrlItemElement控件,继续更新中·····



     在ListCtrl控件和 ListCtrlItemElement控件中通过一个SetOwner接口,模仿List控件的代码,让他们之间可以交流信息,然后对ListCtrlItemElement控件的DoEvent事件处理代码和DoPaint绘图代码的重写,实现了选中效果,目前的大概效果如下。剩下的工作是对控件效果和控件位置信息的微调。

对代码进行微调后,我对右边的新建,删除,赋值,编辑4个按钮的代码也编写完成,控件可以动态增加、删除、赋值、修改。现在整个控件已经开发完成,附上效果图和原要求图。





     写了好几个小时,休息一下~~

2014.7.16   13:26  Redrain 

duilib中ListCtrl控件的实现的更多相关文章

  1. duilib中各控件响应的消息类型

    消息 说明 Sender click 鼠标点击 CButtonUI dropdown 下拉显示 CComboUI headerclick 点击列标题 CListHeaderItemUI itemact ...

  2. 改进duilib的richedit控件的部分功能

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41208207 如果要使用透明异形窗体功能,首先要改进duilib库让他本 ...

  3. duilib修复ActiveXUI控件bug,以支持flash透明动态背景

    转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了 防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背 ...

  4. 将webkit内核封装为duilib的浏览器控件

    转载请说明出处,谢谢~~ 原本的duilib是自带浏览器控件的,但是使用了IE内核,我在做仿酷狗音乐播放器时,在右侧乐库要用到浏览器控件,而我使用自带的IE控件却发现了不少缺点,这也是duilib一直 ...

  5. ListCtrl控件的使用

    list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...

  6. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  7. ListCtrl控件着色

    最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...

  8. LISTCTRL控件方法

    以下未经说明,listctrl默认view风格为report --------------------------------------------------------------------- ...

  9. Duilib教程-控件练习

    一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为 ...

随机推荐

  1. unity3d引擎程序员养成

    标准流程:1. c++ Primer 英文版(第四或第五版)全部看完习题做完是必须的.渲染程序设计比较复杂,后期会用到c++的全部特性.c++学的越好后面越轻松.要看英文版,计算机翻来覆去就那么几个单 ...

  2. NSFileManager 沙盒文件管理

    文件夹创建,复制,移动,删除,检查是否存在,代码如下: 1.获取沙盒 document 路径,作为文件夹路径的基路径. NSString *document = NSSearchPathForDire ...

  3. ExtJS4.2学习(20)动态数据表格之前几章总结篇1(转)

    鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2014-02-18/196.html --------------- ...

  4. LA 4731

    dp[i][j]意思是前i个分成j组最小的花费 #include<cstdio> #include<algorithm> #include<cstring> #in ...

  5. 在MAC下调试运行暗黑全世界客户端及部分代码注解(基于Firefly)

    原地址:http://www.myexception.cn/program/1399860.html 在MAC下调试运行暗黑全世界客户端及部分代码注解(基于Firefly) 在MAC下调试运行暗黑世界 ...

  6. Chp3: Stacks and Queue

    1. 说明如何用两个队列来实现一个栈,并分析有关栈操作的运行时间. 解法:1.有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作.2.现在要做pop操作,即要得到c,这时可以将 ...

  7. 如何在eclipse里使用git

    新版都自带git插件了.在项目上右键,选team,选share project,再选择git就可以了. 如果在本地使用git比较简单.如果要多人共享的使用git,那么需要专门的服务器,并提供ssh,这 ...

  8. linux踢人命令 pkill踢人用法

    首先使用who命令查看在线用户,然后踢人. 强制踢人命令格式:pkill -kill -t tty 解释: pkill -kill -t 踢人命令 tty 所踢用户的TTY或者pts/x(x代表数字) ...

  9. linux top动态查看进程信息

    来源<鸟哥的linux私房菜> top:动态观察程序的变化 [root@linux ~]# top [-d] | top [-bnp] 参数: -d :后面可以接秒数,就是整个程序画面更新 ...

  10. git 命令整理

    记录一些git 命令,以便自己以后查阅 基本命令   1.git add (保存工作区的变动到暂存区) git add . 和git add -A把整个工作区添加到暂存区 2.git commit ( ...