snoopy每日一译-全自动组合CheckBox类CGroupCheckBox
by:Geno Carman 2004.5.14
翻译:snoopy
环境: VC++ 6.0, WinXP
我决定我需要一个组合框和CheckBox框的集合的控件。于是我开始写一个。当我遇到困难,我去搜索看是否别人已经实现。当看了Ming Liu的文章"CGroupCheck - Checkbox associated with a groupbox",我解决了这个困难。我感谢他为我铺设的道路,虽然我实现的方法不一样。
以下是一个使用我的CGroupCheckBox控件的例子:
![get_image[17,083字节]](/upload/2004/05/1047343491031.jpg)
当点击checkbox会enables/disables所有的在groupbox里的控件。父窗口把控件看作一个checkbox。
风格:
注意到上面的对话框包含CGroupCheckBox的两种风格。一种指出包含所有控件;另一种忽略Static ID,只有那些ID不是IDC_STATIC的控件才被enables/disables。可以使用SetStyle()设定风格。
SetStyle()是你唯一需要调用的函数,而且是改变默认风格才需要调用。下面是一个例子:
使用:
只需在你的对话框中加入一个groupbox,并给它一个ID(将IDC_STATIC改成别的什么东西)。将所有你想将它们enable/disable的控件放入groupbox中。所有的控件的客户窗口必须全部在groupbox中。使用向导建立一个CButton类型的变量。在头文件中将CButton修改成CGroupCheckBox。
自定义一个CGroupCheckBox的DDX_ function:void AFXAPI DDX_GroupCheck(CDataExchange* pDX, int nIDC, int& value), 建立一个BOOL变量例如下面例子的m_bIgnore:
OGX 文件:
我发现一个最容易重用类的方法:将它们加入Component Gallery,这些类就在类向导中可以使用了。在这个例子中,你就可以通过类向导建立一个CGroupCheckBox控件变量。