VC控件的group属性

来源:互联网 发布:怎么查询淘宝授权书 编辑:程序博客网 时间:2024/06/07 03:04

作用

VC控件的group属性主要是为Radio Button服务的,其作用是把一组相关的radio button都group到一起,这几个radio button可以共用一个(整型)变量,从而简化代码。

VS2010中文版IDE的描述:

指定基于Tab键顺序的一组控件中的第一个控件。

描述有些拗口,下面举一个示例进行说明。

例子

UI

创建两组radio,一组描述颜色,另外一组描述fruit。每一组都设计了三个radio button。

另外设计一个Edit控件,显示用户的选择。UI效果如下:

ui

Resource

这个对话框的资源代码如下:

IDD_GROUPTEST_DIALOG DIALOGEX 0, 0, 191, 163STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_APPWINDOWCAPTION "GroupTest"FONT 8, "MS Shell Dlg", 0, 0, 0x1BEGIN    GROUPBOX        "Color",IDC_STATIC,20,17,154,34    CONTROL         "Red",IDC_RED,"Button",BS_AUTORADIOBUTTON | WS_GROUP,29,27,40,17    CONTROL         "Green",IDC_GREEN,"Button",BS_AUTORADIOBUTTON,68,28,40,17    CONTROL         "Blue",IDC_BLUE,"Button",BS_AUTORADIOBUTTON,117,28,40,17    GROUPBOX        "Fruit",IDC_STATIC,21,62,152,43,WS_GROUP    CONTROL         "Apple",IDC_APPLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,32,75,40,17    CONTROL         "Orange",IDC_ORANGE,"Button",BS_AUTORADIOBUTTON,70,76,40,17    CONTROL         "Banana",IDC_BANANA,"Button",BS_AUTORADIOBUTTON,120,76,40,17    LTEXT           "Selection:",IDC_STATIC,22,115,83,8    EDITTEXT        IDC_SELECTION,22,130,152,17,ES_AUTOHSCROLL | ES_READONLYEND

这里已经定义好了各个控件的tab顺序。

group

IDC_RED/Green/Blue这三个radio button是一组的,所以需要给第一个radio button(即IDC_RED)设置group属性,即设置为True;后面的两个radio button的group属性设置为false。以此说明这三个是一组。

表示color的最后一个radio button是IDC_BLUE,所以该控件接下来的分组框Fruit IDC_STATIC就需要设置为True,说明这个Fruit IDC_STATIC开始了一个新的分组。等价于说,IDC_RED/Green/Blue这三个radio button是一组,啰嗦了???

虽然,这个Fruit IDC_STATIC的group属性设置为False也不会有功能上的问题,但这种及时设置True表示终结一个group的划分,总是一个好的编程习惯罢。

类似地,可以了解接下来的三个Radio Button,即IDC_APPLE,IDC_ORANGE,IDC_BANANA的group属性。

可以看到在IDC_BANANA后面的”Selection:” IDC_STATIC没有设置group属性为True,尽管不是一个好的编程习惯,但不影响程序的功能。

为控件映射一个成员变量

对于group起来的一组radio button,只需要为第一个控件映射一个整型变量即可。如此,这一组的radio button对应的整数就分别为0,1,2,……。

代码

头文件:

int m_iColor;int m_iFruit;CString m_sSelection;afx_msg void OnBnClickedRed();afx_msg void OnBnClickedGreen();afx_msg void OnBnClickedBlue();afx_msg void OnBnClickedApple();afx_msg void OnBnClickedOrange();afx_msg void OnBnClickedBanana();void UpdateSelection();

实现文件:

void CGroupTestDlg::OnBnClickedRed(){    UpdateSelection();}void CGroupTestDlg::OnBnClickedGreen(){    UpdateSelection();}void CGroupTestDlg::OnBnClickedBlue(){    UpdateSelection();}void CGroupTestDlg::OnBnClickedApple(){    UpdateSelection();}void CGroupTestDlg::OnBnClickedOrange(){    UpdateSelection();}void CGroupTestDlg::OnBnClickedBanana(){    UpdateSelection();}void CGroupTestDlg::UpdateSelection(){    UpdateData(TRUE);    const size_t MAX_SIZE = 3;    static CString sColors[MAX_SIZE] = {"Red", "Green", "Blue"};    static CString sFruits[MAX_SIZE] = {"Apple", "Orange", "Banana"};    CString sColor("None"), sFruit("None");    if (m_iColor >= 0 && m_iColor < MAX_SIZE) sColor = sColors[m_iColor];    if (m_iFruit >= 0 && m_iFruit <= MAX_SIZE) sFruit = sFruits[m_iFruit];    m_sSelection.Format("Color(%d): %s; Fruit(%d): %s",         m_iColor, sColor,        m_iFruit, sFruit);    UpdateData(FALSE);}
0 0