单选钮用来表示一系列的互斥选项,这些互斥项常常被分成若干个组,每组仅允许用户选择一个选项;复选框与单选按钮相象,不同之处是复选框代表多重选择,用户可以选择一个或多个选项。
为了方便说明,我们假定创建了基于对话框的MFC应用程序,第一个组框为"分数",内有四个单选按钮:"100","90","80","70".ID分别为IDC_RADIO1,IDC_RADIO2,IDC_RADIO3,IDC_RADIO4;IDC_RADIO1的Group属性为TRUE.第二个组框为"加权",内有四个复选按钮:"10","9","8","7",ID分别为IDC_CHECK1,IDC_CHECK2,IDC_CHECK3,IDC_CHECK4;IDC_CHECK1的Group属性为TRUE.
判断哪个单选按钮按下:第一种方式:给IDC_RADIO1关联一个int型变量m_radio,首先调用UpdateData(TRUE);然后判断IDC_RADIO1的值
void CCBaseButtonDlg::OnCheckin()
{
// TODO: Add your control notification handler code here
GetDlgItem(ID_RESET)->EnableWindow(true); //重新选择有效
GetDlgItem(ID_CHECKIN)->EnableWindow(false); //提交按钮无效
UpdateData(true);
m_show="内存: "; //保存输出消息字符串
CString str;
switch(m_radio)
{
case 0: //该组第一个单选项被选中
GetDlgItemText(IDC_RADIO1,str);
m_show=m_show+str;
break;
case 1: //该组第二个单选项被选中
GetDlgItemText(IDC_RADIO2,str);
m_show=m_show+str;
break;
case 2: //该组第三个单选项被选中
GetDlgItemText(IDC_RADIO3,str);
m_show=m_show+str;
break;
}
if(m_check1.GetCheck()==1) //复选框1被选中
{
GetDlgItemText(IDC_CHECK1,str);
m_show=m_show+str;
}
if(m_check2.GetCheck()==1) //复选框2被选中
{
GetDlgItemText(IDC_CHECK2,str);
m_show=m_show+str;
}
if(m_check3.GetCheck()==1) //复选框3被选中
{
GetDlgItemText(IDC_CHECK3,str);
m_show=m_show+str;
}
if(m_check4.GetCheck()==1) //复选框4被选中
{
GetDlgItemText(IDC_CHECK4,str);
m_show=m_show+str;
}
UpdateData(false);
}
void CCBaseButtonDlg::OnReset()
{
// TODO: Add your control notification handler code here
GetDlgItem(ID_RESET)->EnableWindow(false); //重新选择按钮无效
GetDlgItem(ID_CHECKIN)->EnableWindow(true); //提交选择按钮有效
m_radio=1; //单选框的默认值
m_check1.SetCheck(0); //复选框1不选中
m_check2.SetCheck(0); //复选框2不选中
m_check3.SetCheck(0); //复选框3不选中
m_check4.SetCheck(0); //复选框4不选中
m_show="";
UpdateData(false);
}
//
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;
}
判断哪些复选按钮按下:第一种方式:给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);