MFC RadioButton用法详解



基础介绍:

radio button通常都是成组使用的,在一组里面是互斥的。

分组的原则是:

1、首先将RadioButton控件定好Tab顺序,具体方法:工具栏“格式”—>Tab键顺序”选项选中,然后按照预定的顺序依次点击对话框上面的RadioButton按钮,Tab键顺序设定完成。

2、按照上面的Tab键顺序进行分组,然后设定每组第一个RadioButtonGroup属性为TRUE,分组完成,即从当前设置Group属性为TRUERadioButton开始直到碰到下一个选上Group属性的RadioButton的前一个RadioButton为一个组。

3、为单选控件定义Control变量或Value变量,每组只能定义一个,通过设定值来确定哪一个RadioButton被选中,其中-1表示该组均不被选中,0表示该组第一个RadioButton被选中,1表示第二个……)。

  

环境:Visual Studio2010

以对话框为例,工程名称为:RadioButtonInstance。此工程中,共创建四组RadioButton,记着设定Tab键顺序以及为每组第一个RadioButton设置Group属性。初始化对话框为下图:

MFC <wbr> <wbr>RadioButton用法详解
为该工程中的RadioButton设定下面若干变量:(为单选控件定义Control变量或Value变量,每组只能定义一个)

BOOL m_Radio1;//对应于组 1 1

       BOOL m_Radio3; //对应于组 2 1

       BOOL m_Radio7; //对应于组 3 1

       BOOL m_Radio9; //对应于组 4 1

       CButton m_RBtGroup1; //对应于组 1 1    

CButton m_RBtGroup2; //对应于组 2 1

       CButton m_RBtGroup3; //对应于组 3 1

       CButton m_RBtGroup4; //对应于组 4 1

 

添加变量

方法一:利用类向导方法添加变量(略)

方法二:直接编程如下

 

RadioButtonInstanceDlg.h文件中:

代码部分如下

class CRadioButtonInstanceDlg : public CDialogEx

{

// 构造

public:

       CRadioButtonInstanceDlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据

       enum { IDD = IDD_RADIOBUTTONINSTANCE_DIALOG };

       protected:

       virtual void DoDataExchange(CDataExchange* pDX);       // DDX/DDV 支持

// 实现

protected:

       HICON m_hIcon;

       // 生成的消息映射函数

       virtual BOOL OnInitDialog();

       afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

       afx_msg void OnPaint();

       afx_msg HCURSOR OnQueryDragIcon();

       DECLARE_MESSAGE_MAP()

public:

       BOOL m_Radio1;

       BOOL m_Radio3;

       BOOL m_Radio7;

       BOOL m_Radio9;

       CButton m_RBtGroup1;

       CButton m_RBtGroup2;

       CButton m_RBtGroup3;

       CButton m_RBtGroup4;

};

 

RadioButtonInstanceDlg.cpp文件中:

void CRadioButtonInstanceDlg::DoDataExchange(CDataExchange* pDX)

{

       CDialogEx::DoDataExchange(pDX);

       DDX_Radio(pDX, IDC_RADIO1, m_Radio1);

       DDX_Radio(pDX, IDC_RADIO3, m_Radio3);

       DDX_Radio(pDX, IDC_RADIO7, m_Radio7);

       DDX_Radio(pDX, IDC_RADIO9, m_Radio9);

       DDX_Control(pDX, IDC_RADIO1, m_RBtGroup1);

       DDX_Control(pDX, IDC_RADIO3, m_RBtGroup2);

       DDX_Control(pDX, IDC_RADIO7, m_RBtGroup3);

       DDX_Control(pDX, IDC_RADIO9, m_RBtGroup4);

}

 

 

问题一:如何更改RadioButton默认值???

 

方法1

在定义控件变量时,默认变量初值为-1,表示此组的任何RadioButton均不被选中,如果需要改变初始默认按钮的设置情况,只需要在对话框的构造函数中把变量初值设为相应的变量值即可。下面附代码和效果图

例如 构造函数:
CRadioButtonInstanceDlg::CRadioButtonInstanceDlg(CWnd* pParent )

       : CDialogEx(CRadioButtonInstanceDlg::IDD, pParent)

{

       m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

       //设置RadioButton初始默认值。如果此处不设置,那么默认值均为-1,即任何一个RadioButton均不被选中

       m_Radio1=-1;

       m_Radio3=3;

       m_Radio7=1;

       m_Radio9=0;

}

效果图如下:

 

 MFC <wbr> <wbr>RadioButton用法详解



方法2

只需要在对话框的OnInitDialog()方法中添加下面代码中绿色的部分即可。

BOOL CRadioButtonInstanceDlg::OnInitDialog()

{

       CDialogEx::OnInitDialog();

       // 将“关于...”菜单项添加到系统菜单中。

       // IDM_ABOUTBOX 必须在系统命令范围内。

       ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

       ASSERT(IDM_ABOUTBOX < 0xF000);

 

       CMenu* pSysMenu = GetSystemMenu(FALSE);

       if (pSysMenu != NULL)

       {

              BOOL bNameValid;

              CString strAboutMenu;

              bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

              ASSERT(bNameValid);

              if (!strAboutMenu.IsEmpty())

              {

                     pSysMenu->AppendMenu(MF_SEPARATOR);

                     pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

              }

       }

       // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

       //  执行此操作

       SetIcon(m_hIcon, TRUE);                  // 设置大图标

       SetIcon(m_hIcon, FALSE);          // 设置小图标

       // TODO: 在此添加额外的初始化代码

//此种方法可以为任何一个RadioButton设置其“是否check”状态,未指定的均为不选上状态

       ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上

       ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);// 不选上

       ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(TRUE);//选上

       ((CButton *)GetDlgItem(IDC_RADIO8))->SetCheck(TRUE);//选上

       ((CButton *)GetDlgItem(IDC_RADIO9))->SetCheck(TRUE);//选上

       return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

 

效果图如下:

 

 MFC <wbr> <wbr>RadioButton用法详解

方法3

单选控件每组只能定义个Control变量或Value变量。首先为每一组RadioButton关联一个Control变量,名字分别为m_RBtGroup1m_RBtGroup2m_RBtGroup3m_RBtGroup4。然后设定RadioButton初始状态。

 

代码如下:

BOOL CRadioButtonInstanceDlg::OnInitDialog()

{

       CDialogEx::OnInitDialog();

       // 将“关于...”菜单项添加到系统菜单中。

       // IDM_ABOUTBOX 必须在系统命令范围内。

       ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

       ASSERT(IDM_ABOUTBOX < 0xF000);

       CMenu* pSysMenu = GetSystemMenu(FALSE);

       if (pSysMenu != NULL)

       {

              BOOL bNameValid;

              CString strAboutMenu;

              bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

              ASSERT(bNameValid);

              if (!strAboutMenu.IsEmpty())

              {

                     pSysMenu->AppendMenu(MF_SEPARATOR);

                     pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

              }

       }

       // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

       //  执行此操作

       SetIcon(m_hIcon, TRUE);                  // 设置大图标

       SetIcon(m_hIcon, FALSE);          // 设置小图标

       // TODO: 在此添加额外的初始化代码

// //此种方法只能为每一组的第一个RadioButton设置其“是否check”状态

    m_RBtGroup1.SetCheck(FALSE);

    m_RBtGroup2.SetCheck(TRUE);

    m_RBtGroup3.SetCheck(TRUE);

    m_RBtGroup4.SetCheck(TRUE);

       return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

 

效果图如下:

MFC <wbr> <wbr>RadioButton用法详解

 

问题二:如何获取RadioButton当前状态???

 

获取RadioButton是否选中的状态方法如下:

 

方法一:可以使用GetCheck()获取状态。

例如:

 

((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck();//返回1表示选上,0表示没选上

 

方法二:获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值即可。

例如:

UpdateData(TRUE);

CString m_R1;

m_R1.Format(_T("the value of m_Radio1 is %d"),m_Radio1);

AfxMessageBox(m_R1);

 

可以根据需要为RadioButton添加鼠标单击事件

 

问题三:如何为RadioButton添加单击消息函数???

方法一:双击RadioButton按钮,进入消息函数,然后添加相应的代码。

方法二:用ClassWizard生成各单选按钮的单击消息函数,然后添加相应的代码。

例如:

void CRadioButtonInstanceDlg::OnBnClickedRadio1()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio1=0; //选中此组的第一个RadioButton

       CString m_R1;

       m_R1.Format(_T("the value of m_Radio1 is %d"),m_Radio1);

       AfxMessageBox(m_R1);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio2()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio1=1;//选中此组的第二个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio3()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio3=0;//选中此组的第一个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio4()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio3=1;//选中此组的第二个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio5()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio3=2;//选中此组的第三个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio6()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio3=3;//选中此组的第四个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio7()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio7=0;//选中此组的第一个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio8()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio7=1;//选中此组的第二个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio9()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio9=0;//选中此组的第一个RadioButton

       UpdateData(FALSE);

}

void CRadioButtonInstanceDlg::OnBnClickedRadio10()

{

       // TODO: 在此添加控件通知处理程序代码

       m_Radio9=1;//选中此组的第二个RadioButton

       UpdateData(FALSE);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC中的RadioButton可以通过分组来实现不同的选择。在同一个分组内,只能选择一个RadioButton,而不同的分组之间则互不影响。可以通过在资源编辑器中设置RadioButton的Group属性来进行分组。在代码中,可以使用CButton类的GetCheck和SetCheck函数来获取和设置RadioButton的选中状态。 ### 回答2: MFC中的RadioButton是一种特殊的控件,它们可以在同一组内进行选择。通常,Radio Button控件用于在一组中选择单个选项,而CheckBox控件用于在一组中选择多个选项。 MFC中的RadioButton控件可以通过一些属性进行分组。比如说,通过将它们的ID设置为同一个ID,就可以把它们分在同一组中。这样,只有其中一个选项可以被选择,而其他选项则被自动取消选择。 首先,在资源编辑器中选择一个Radio Button控件,然后在其属性列表中设置控件ID。对于需要组合成一组的Radio Button控件,它们的ID应该相同。 如果需要添加其他的Radio Button到此组中,可选择添加Radio Button控件,并将其ID与现有组中RadioButton控件的ID相同即可。 当用户点击一个Radio Button时,其他Radio Button自动取消选择。这种行为是由MFC内置的消息响应机制控制的,通常会触发一个WM_COMMAND的消息。 总的来说,MFC Radio Button控件的分组是一种方便用户进行单选操作的有效方法,可以为相似或相关的选项建立分组,并确保用户只能在每个组中选择一个选项。 ### 回答3: MFC中的RadioButton控件常用于在多个选项中进行单选操作。当需要将多个RadioButton进行分组时,可以使用同一个Group Box控件来实现分组效果。 首先,需要在对话框设计器中添加一个Group Box控件,用来包含RadioButton控件。在Group Box控件中添加需要进行单选操作的RadioButton控件。 接着,对于每个RadioButton控件,需要设置它们的相同Group ID,以便系统知道这些RadioButton属于同一分组。可以通过在属性窗口中设置“Group ID”来实现,或者使用代码进行设置,如: ``` m_radioBtn1.SetGroupId(1); m_radioBtn2.SetGroupId(1); m_radioBtn3.SetGroupId(1); ``` 其中,“m_radioBtn1、m_radioBtn2、m_radioBtn3”为RadioButton控件的变量名,“1”为分组的ID号。 最后,可以在代码中获取选中的RadioButton控件的ID号,以便进行相应的操作。可通过以下代码获取选中的RadioButton控件的ID号: ``` int nCheckedID = GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO3); ``` 其中,“IDC_RADIO1、IDC_RADIO3”为第一个和最后一个RadioButton控件的ID号。 通过以上步骤,即可成功实现MFC RadioButton的分组操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值