Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1348857
  • 博文数量: 946
  • 博客积分: 52360
  • 博客等级: 大将
  • 技术积分: 13080
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-07 17:31
文章分类

全部博文(946)

文章存档

2011年(1)

2008年(945)

我的朋友

分类: C/C++

2008-08-07 17:42:24

下载本文示例代码
摘要
  WINDOWS应用程序的创建一般都需要使用控件,像VB、DELPHI等编程环境都提供了相当多的控件供程序员调用,这些控件基本上能满足程序开发的要求,但有时也会有些不尽如意的地方,因此学会创建自定义控件有一定的重要性。本程序实现了一个可以折叠、可以更换成员类型的特效列表控件。

关键字 特效列表控件

一、创建目标

  1. 建立类似于Windows XP窗口中左部的列表控件,如下图所示
  2.  

  3. 用户可自由添加列表成员
  4. 控件可以折叠和伸展,折叠时只显示标题栏
  5. 控件可显示在由CWnd派生的窗口类中
  6. 每个成员可响应鼠标事件,并向用户提供编程接口

二、设计与实现

1、对象

特效列表控件(TaskListBox)——提供用户编程接口,处理与窗口对象衔接。
特效列表(TaskList)——受特效列表控件委托,实现控件的所有功能。
成员(Item)——代表每个列表成员,可以响应鼠标事件。
边框(TaskFrame)——处理特效列表控件的标题与边框绘制。
折叠按钮(PuckerBtn)——实现特效列表控件的折叠动作。

2、对象结构如下图所示

3、本程序综合使用了设计模式,详细实现见源代码。下面是TaskListBox部分实现代码:


bool CTaskListBox::CreateTaskList()

{

	UINT id = this->GetDlgCtrlID();

	CString str;

	GetWindowText(str);

	m_pTaskList = new CTaskList(this, new CTaskFrame(str), new CPuckerBtn(this), new CTaskItem(this, id));

	ASSERT(m_pTaskList);

	

	return m_pTaskList != NULL;

}



bool CTaskListBox::CreateColorList()

{

	UINT id = this->GetDlgCtrlID();

	CString str;

	GetWindowText(str);



	m_pTaskList = new CTaskList(this, new CTaskFrame(str), new CPuckerBtn(this), new CColorItem(this, id));

	ASSERT(m_pTaskList);



	return m_pTaskList != NULL;

}

三、特效列表控件的使用

  从对象结构图中可以看出特效列表控件派生自MFC中的CStatic静态控件,其创建方式与静态控件完全相同,控件通过向父窗口发送消息来提供编程接口。下面是特效列表控件的在对话框中的初始化代码:


	m_lbTask.CreateTaskList();

	CString tasks[] = 

	{

		"Explorer 7.0",  "WINRAR 4.0", "MediaPlayer", "Reader 7.0",

		"PowerDesigner", "Word 2000",  "EXCEL 2000",  "RealPlayer 10",

		"AutoCAD 2004",  "ACCESS 2003"  

	};



	CImageList m_imgList;

	m_imgList.Create(IDB_BITMAP1,16, 1, RGB(255,255,255));

	ItemInfo item;

	item.type = II_ICONTEXT;

	for(int i = 0; i < sizeof(tasks) / sizeof(tasks[0]); i  )

	{

		item.index = i;

		item.text  = tasks[i];

		item.icon  = m_imgList.ExtractIcon(i % 10);

		m_lbTask.AddItem(item);

	}

	m_lbTask.ReSize();

下载本文示例代码
阅读(310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~