类别列表框






4.93/5 (9投票s)
模仿 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”添加到您的项目中。就是这样!您不需要将任何图像添加到资源文件中,因为此类会自行绘制其按钮和复选框。
要将此控件添加到您的对话框中,请执行以下操作
- 将
listbox
添加到您的对话框资源中。 - 为“所有者绘制:固定”设置您的
listbox
资源,并选中“包含字符串”。 - 在您的对话框代码中创建一个
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 日:初始版本