CGroupCheckBox 控件






4.13/5 (7投票s)
2004年5月17日
2分钟阅读

49279

2345
一个完全自动化的分组框和复选框,
引言
我需要一个组合的GroupBox和Checkbox控件。我希望GroupBox内的所有控件都根据与GroupBox关联的Checkbox的点击状态被启用/禁用。
背景
我直接开始编写。当我遇到困难时,我开始寻找是否有人尝试过这个。在研究了Ming Liu在他的文章“CGroupCheck - 与GroupBox关联的Checkbox”中的代码后,我解决了我的问题。我欠他一份感激之情,因为他为我铺平了道路,尽管我采用了不同的方法来解决这个问题。
使用代码
只需将一个GroupBox添加到你的对话框中,并为其分配一个ID(将默认ID IDC_STATIC
更改为其他ID)。将所有你希望它启用/禁用的控件放在GroupBox内。所有控件的客户端区域必须完全位于GroupBox内。使用类向导创建一个类型为CButton
的成员变量。在头文件中将CButton
更改为CGroupCheckBox
。
DDX_
CGroupCheckBox
还定义了一个自定义的 DDX_
函数,void AFXAPI DDX_GroupCheck(CDataExchange* pDX, int nIDC, int& value)
,你可以将其添加到对话框的 DoDataExchange()
函数中。只需创建一个 public BOOL
变量,例如 m_bIgnore
,并按如下操作
void CGroupCheckBoxDemoDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGroupCheckBoxDemoDlg) DDX_Control(pDX, IDC_GROUP2, m_ctlIgnore); //}}AFX_DATA_MAP DDX_GroupCheck(pDX, IDC_GROUP2, m_bIgnore); }
样式
请注意,上述对话框包含两种样式的 CGroupCheckBox
。标记为 Touch All 的控件会启用/禁用其所有包含的控件,并且默认情况下创建。另一个,标记为 Ignore Static IDs, 仅启用/禁用那些ID不是 IDC_STATIC
的控件。该样式通过调用成员函数 SetStyle()
设置。
SetStyle()
是你唯一需要调用的函数,并且只需要在更改默认样式时才需要调用。来自上述应用程序的用法示例
BOOL CGroupCheckBoxDemoDlg::OnInitDialog() { CDialog::OnInitDialog(); // Change the CGroupCheckBox style from the default. m_ctlIgnore.SetStyle(CGroupCheckBox::TCH_IGNORE); return TRUE; }
关注点
OGX 文件
我发现重用我的类最简单的方法是将它们添加到组件库。然后,这些类可以通过类向导供你使用。对于 CGroupCheckBox
,你可以使用类向导创建这种类型的成员变量。演示程序还使用了我之前写过的一篇关于 CGlyphButton
的文章。它也作为 OGX 文件提供。