程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 自定義控件—特效列表控件

自定義控件—特效列表控件

編輯:關於VC++

一、創建目標

建立類似於Windows XP窗口中左部的列表控件,如下圖所示

用戶可自由添加列表成員

控件可以折疊和伸展,折疊時只顯示標題欄

控件可顯示在由CWnd派生的窗口類中

每個成員可響應鼠標事件,並向用戶提供編程接口

二、設計與實現

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();

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved