CCheckComboBox II
一个在每个项目旁边都有复选框的组合框。
引言
这个控件实际上是对 CCheckComboBox 类的修改,该类由 Magnus Egelberg, Lunalogik 编写。 Magnus 的控件几乎包含了我在 CheckComboBox 中寻找的所有功能,除了一个小特性。它不允许您在组合框的静态文本部分选中一个项目,您必须下拉列表框才能进行选择。这个类中的所有绘图代码都是由 Magnus 编写的。我唯一添加的是处理静态文本区域中复选框的代码,并且我删除了对项目数据依赖以存储项目的选中状态。它现在存储在 CByteArray
成员变量中。
用法
要使用该控件,您必须包含 CheckComboBox.h 头文件并将 CheckComboBox.cpp 文件添加到您的项目中。
如果在对话框中使用该控件,它必须具有 CBS_DROPDOWNLIST
和 CBS_OWNERDRAWVARIABLE
组合框样式。
命令通知
除了组合框生成的常规 CBN_*
通知之外,每当用户更改复选框的选中状态时,CCheckComboBox
也会生成 BN_CLICKED
通知。您可以像处理按钮控件生成 BN_CLICKED
通知的方式完全相同的方式处理 BN_CLICKED
通知。使用 GetCurSel()
成员函数来获取生成 BN_CLICKED
通知的复选框的索引。
BEGIN_MESSAGE_MAP(CCCheckCombo_demoDlg, CDialog) // use the ON_BN_CLICKED macro to catch the BN_CLICKED // command that is generated by the CCheckComboBox ON_BN_CLICKED(IDC_COMBO1, OnCheckBox) END_MESSAGE_MAP() ... void CCCheckCombo_demoDlg::OnCheckBox() { int sel = m_CheckCombo.GetCurSel(); CString text; m_CheckCombo.GetLBText(sel, text); BOOL checked = m_CheckCombo.GetCheck(sel); TRACE(_T("Item %d (\"%s\") was %s \n"), sel, text, checked ? _T("checked") : _T("unchecked")); }
成员函数
这些是添加到 CCheckComboBox
的公共成员函数。也可以使用所有 CComboBox
成员函数。
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
使用此函数动态创建
CCheckComboBox
控件。所需的组合框样式会自动设置。返回值
如果成功,则为非零值,否则为 0。
参数
dwStyle
控件的 WS_*
和CBS_*
样式。如果未指定CBS_DROPDOWNLIST
和CBS_OWNERDRAWVARIABLE
样式,则会自动设置。rect
CCheckComboBox
的位置和大小。pParentWnd
指定 CCheckComboBox
的父窗口(通常是CDialog
)。它不能为NULL
。nID
指定 CCheckComboBox
的控件 ID。BOOL GetCheck(int nIndex)
使用此函数获取指定从零开始的索引处的复选框的选中状态。
返回值
如果选中复选框,则为
TRUE
,否则为FALSE
。参数
nIndex
复选框的从零开始的索引 BOOL SetCheck(int nIndex, BOOL bCheck = TRUE)
设置指定从零开始的索引处的复选框的选中状态。
返回值
先前的选中状态。如果选中复选框,则为
TRUE
,否则为FALSE
。参数
nIndex
复选框的从零开始的索引 bCheck
新的选中状态。 TRUE
用于选中复选框,FALSE
用于取消选中它。void CheckAll(BOOL bCheck = TRUE)
设置
CCheckComboBox
控件中所有复选框的选中状态。返回值
没有返回值。
参数
bCheck
新的选中状态。 TRUE
用于选中复选框,FALSE
用于取消选中它们。