65.9K
CodeProject 正在变化。 阅读更多。
Home

类别列表框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (9投票s)

2002 年 6 月 25 日

CPOL

2分钟阅读

viewsIcon

114187

downloadIcon

3654

模仿 Outlook 分类列表框行为的控件

无复选框(默认)
带有复选框

描述

此控件模拟了 Microsoft Outlook 分类列表框的行为。它显示一个分类列表,每个分类都有自己的项目列表。可以打开分类以显示其项目,也可以关闭分类以隐藏它们。其目的是帮助改善列表组织,并使用户更容易找到他们想要的内容。

分类具有以下属性

  • 在列表中以灰色背景表示。
  • 分类名称必须唯一。(区分大小写。)
  • 可以拥有 0 到 N 个子项目。
  • 具有打开/关闭按钮以显示/隐藏其项目。
  • 可以通过双击它们或按空格键来打开/关闭它们。

分类项目具有以下属性

  • 必须分配给一个分类
  • 项目名称不必唯一
  • 可以显示复选框在其旁边(Microsoft Outlook 没有此功能。)
  • 可以通过单击它们或按空格键来选中/取消选中复选框。
  • 项目可以与其一起存储 DWORD 数据。(CListBox 具有此功能。)

其他支持的功能

  • 如果设置了 LBS_SORT 样式,则对分类及其项目进行排序
  • 支持选择模式:单选、多选、扩展和无
  • 应该支持 Unicode(我尚未验证此点。)

实现

分类 listbox 类是从 MFC CListBox 类派生的。大多数 CListBox 的函数仍然可以使用,但是,某些函数已被保护,从而强制您使用此类自身的函数。您无法使用以下 CListBox 函数与此类一起使用

   AddString( LPCTSTR pString );
   InsertString( int iIndex, LPCTSTR pString );
   DeleteString( int iIndex );
   GetItemData( int iIndex );
   SetItemData( int iIndex, DWORD dwValue );

分类 listbox 类已尽可能简单,以便您轻松地将此控件添加到您的项目中。您只需要将文件“CatListBox.cpp”和“CatListBox.h”添加到您的项目中。就是这样!您不需要将任何图像添加到资源文件中,因为此类会自行绘制其按钮和复选框。

要将此控件添加到您的对话框中,请执行以下操作

  1. listbox 添加到您的对话框资源中。
  2. 为“所有者绘制:固定”设置您的 listbox 资源,并选中“包含字符串”。

  3. 在您的对话框代码中创建一个 CCatListBox 成员变量。例如...
       #include "CatListBox.h"
       class MyDialog : public CDialog
       {
          public:
          // Dialog Data
          //{{AFX_DATA( MyDialog )
          enum { IDD = IDD_MY_DIALOG };
          CCatListBox   m_lstCategories;        // Create your variable here.
          //}}AFX_DATA
       }
    
       // Subclass the listbox here.
       // Make sure to replace IDC_LISTBOX_ID with the one you're using.
       void MyDialog::DoDataExchange( CDataExchange* pDX )
       {
          CDialog::DoDataExchange( pDX );
          //{{AFX_DATA_MAP( MyDialog )
          DDX_Control( pDX, IDC_LISTBOX_ID, m_lstCategories );   // Subclass it!
          //}}AFX_DATA_MAP
       }

历史

  • 2002 年 6 月 25 日:初始版本
© . All rights reserved.