分类: C/C++
2008-08-01 17:11:28
关键字 特效列表控件
一、创建目标
二、设计与实现
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();下载本文示例代码