您的位置:逆风者 VC++ 正文
 添加时间:2008-03-22 原文发表:2008-03-22 人气:129

作者:吴磊

源代码下载

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

逆风编程精品

关键字 特效列表控件

一、创建目标

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

     

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

二、设计与实现

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();
相关文章

直接调用类成员函数地址
Thunk 技术的一个改进
一个工业控制管道流动控件的实现
在C++中实现C#的delegate机制
强制编译时约束
VC6绘制3D饼状图
使用SNMP编辑(添加/删除/修改)ARP表
VC6下的GDI+双缓冲
运动搜索算法之钻石搜索(Ver1.0)
基于GDI+的数字图像处理
VC6绘制3D饼状图 - 完美版

相关评论


本文章所属分类:首页 VC++

  热门关键字: