单选钮用来表示一系列的互斥选项,这些互斥项常常被分成若干个组,每组仅允许用户选择一个选项;复选框与单选按钮相象,不同之处是复选框代表多重选择,用户可以选择一个或多个选项。

单选框操作

为了方便说明,我们假定创建了基于对话框的MFC应用程序,第一个组框为"分数",内有四个单选按钮:

ID 标题 Group属性  
IDC_RADIO1 100 TRUE  
IDC_RADIO2 90    
IDC_RADIO3 80    
IDC_RADIO4 70    

判断哪个单选按钮按下:第一种方式:给IDC_RADIO1关联一个int型变量m_radio(需要设置为Group属性才可以关联变量;),首先调用UpdateData(TRUE);然后判断IDC_RADIO1的值;

switch(m_radio)

{

case 0:

MessageBox(_T("100"));

break;

case 1:

MessageBox(_T("90"));

break;

case 2:

MessageBox(_T("80"));

break;

case 3:

MessageBox(_T("70"));

break;

}

第二种方式:

switch(GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4))

{

case IDC_RADIO1:

MessageBox(_T("100"));

break;

case IDC_RADIO2:

MessageBox(_T("90"));

break;

case IDC_RADIO3:

MessageBox(_T("80"));

break;

case IDC_RADIO4:

MessageBox(_T("70"));

break;

}

分组的原则是在选上Group属性的这一个开始直到碰到下一个选上Group属性的。

如果有两组单选按钮,中间存在分组错乱的情形,如果分到确定的组?

设置控件的Tab Order

单击Layout菜单下的Tab Order命令(ctrl+D),设置控件的TAB键顺序(Tab Order),保证单选钮的Tab Order连续。

以Tab Order为序,从Group属性为真的控件开始(包括该控件),到下一个Group属性为真的控件结束(不包括该控件),所有的这些控件将组成一个组。 对于单选钮,同一组内同时只能有一个处于被选中状态。对于由资源编辑器生成的单选按钮控件,在默认情况由Windows自动处理同组控件之间的互斥关系。

设置默认按钮:

在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。

复选框操作

第二个组框为"加权",内有四个复选按钮:

ID 标题 Group属性  
IDC_CHECK1 10 为TRUE  
IDC_CHECK2 9    
IDC_CHECK3 8    
IDC_CHECK4 7    

判断哪些复选按钮按下:第一种方式:给IDC_CHECK1~IDC_CHECK4分别关联一个BOOL型变量m_check1~m_check4,首先调用UpdateData(TRUE);然后判断各个变量的值;

if(m_check1==TRUE)

str+="10";

if(m_check2==TRUE)

str+="9";

if(m_check3==TRUE)

str+="8";

if(m_check4==TRUE)

str+="7";

MessageBox(str);

第二种方式:给IDC_CHECK1~IDC_CHECK4分别关联一个CButton型变量m_check1~m_check4判断各个变量的值;

if(m_check1.GetCheck()==1)

str+="10";

if(m_check2.GetCheck()==1)

str+="9";

if(m_check3.GetCheck()==1)

str+="8";

if(m_check4.GetCheck()==1)

str+="7";

MessageBox(str);

第三种方式:利用GetDlgItem()函数

CButton *pBtn1=(CButton*)GetDlgItem(IDC_CHECK1);

CButton *pBtn3=(CButton*)GetDlgItem(IDC_CHECK2);

CButton *pBtn3=(CButton*)GetDlgItem(IDC_CHECK3);

CButton *pBtn4=(CButton*)GetDlgItem(IDC_CHECK4);

if(pBtn1->GetCheck()==1)

str+="10";

if(pBtn2->GetCheck()==1)

str+="9";

if(pBtn3->GetCheck()==1)

str+="8";

if(pBtn4->GetCheck()==1)

str+="7";

第四种方法:利用IsDlgButtonChecked()函数

if(BST_CHECKED == IsDlgButtonChecked( IDC_CHECK1 ))

str+="10";

if(BST_CHECKED == IsDlgButtonChecked( IDC_CHECK2 ))

str+="9";

if(BST_CHECKED == IsDlgButtonChecked( IDC_CHECK3 ))

str+="8";

if(BST_CHECKED == IsDlgButtonChecked( IDC_CHECK4 ))

str+="7";

MessageBox(str);