单选钮用来表示一系列的互斥选项,这些互斥项常常被分成若干个组,每组仅允许用户选择一个选项;复选框与单选按钮相象,不同之处是复选框代表多重选择,用户可以选择一个或多个选项。
为了方便说明,我们假定创建了基于对话框的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);