VC++ MFC中如何让RadioButton分组,并且互斥

首先让两个RadioButton的Group属性为False。将两个RadioButton放入一个GroupBox里面,即可
如果分成多个组,则将多组Radio分别用GroupBox框起来,并将每组的第一个Radio的Group属性为TRUE,这样,第一组和第二组互不排斥。

本文通过针对两个常见问题的解决方案,详细阐述了MFC中Radio Button的用法。有助于读者加深对于MFC运行机制及Radio Button控件用法的理解。

首先为对话框加上2个radio button,分别是Radio1和Radio2。

问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?

关键是选上,“默认”只要放在OnInitDialog()即可。有如下的三种方法可以让它选上:

第一种:

1

2

3

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

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

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

第二种:

关联一个congtrol型变量(子类化),好ctrl+W(即打开classwizard),点开 Member Variables,咦?怎么没有IDC_RADIO1这个ID?原来是没有分组。因为radio button通常都是成组使用的,在一组里面是互斥的。取消,回到对话框资源面板,右键Radio1查看属性把Group选上,那么,Radio1和Radio2就是一组了(怎么知道他们是一组的?后面说)。此时,就可以为Radio1增加一congtrol型变量m_ctrlRadio1了。如下:

1

m_ctrlRadio1.SetCheck(TRUE);

同样可以使用GetCheck()获取状态。

第三种:

关联一个int型变量(同样需要先分组)m_nRadio1,打开对话框构造函数,你会发现有:

1

m_nRadio1 = -1;

m_nRadio1别赋值-1表示哪个都没有选上。如果你把-1改成0,就会发现Radio1默认被选上了,依此类推,m_nRadio1的值为1就是第二个被选上了(这里同样有问题,哪个是第一个?哪个是第二个?)。获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值即可。

问题2:如何使用多组?

多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。再为对话框添加Radio3和Radio4。很简单,先为这些Radio Button排个顺序,就是排列他们的TAB ORDER。在对话框资源面板上Ctrl+D,然后按你自己的理想顺序用鼠标逐个点击就可以了。不妨假设Radio1、Radio2、Radio3、Radio4分别是1、2、3、4。Radio1和Radio3都选上Group属性,那么,1、2是一组,3、4是另外一组,因为分组的原则是在选上Group属性的这一个开始直到碰到下一个选上Group属性的。你不妨再Ctrl+D,令Radio1、Radio2、Radio3、Radio4分别是1、3、2、4,那么Radio1和Radio3是一组,如果m_nRadio1=1,此时是Radio3被选上而不是Radio2被选上。分好了组就分别使用它们吧。
嗯,也许你还要为它们添加鼠标单击事件,非常简单。

一、对单选按钮进行分组:

每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。如:
Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组
设定Radio1属性:Group,Tabstop,Auto
设定Radio2属性:Tabstop,Auto
设定Radio3属性:Tabstop,Auto
设定Radio4属性:Group,Tabstop,Auto
设定Radio5属性:Tabstop,Auto

二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Radio1、m_Radio4。

三、用ClassWizard生成各单选按钮的单击消息函数,并加入内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

void CWEditView::OnRadio1()

{

  m_Radio1 = 0;  //第一个单选按钮被选中

}

void CWEditView::OnRadio2()

{

  m_Radio1 = 1;  //第二个单选按钮被选中

}

void CWEditView::OnRadio3()

{

  m_Radio1 = 2;  //第三个单选按钮被选中

}

void CWEditView::OnRadio4()

{

  m_Radio4 = 0;  //第四个单选按钮被选中

}

void CWEditView::OnRadio5()

{

  m_Radio4 = 1;  //第五个单选按钮被选中

}

四、设置默认按钮:

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

1

2

3

4

//{{AFX_DATA_INIT(CUnitBlockTypeFlankPublicAdd)

m_Radio1 = 0;  //初始时第一个单选按钮被选中

m_Radio4 = 0;  //初始时第四个单选按钮被选中

//}}AFX_DATA_INIT

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MFCRadioButton可以通过分组来实现不同的选择。在同一个分组内,只能选择一个RadioButton,而不同的分组之间则互不影响。可以通过在资源编辑器设置RadioButton的Group属性来进行分组。在代码,可以使用CButton类的GetCheck和SetCheck函数来获取和设置RadioButton的选状态。 ### 回答2: MFCRadioButton是一种特殊的控件,它们可以在同一组内进行选择。通常,Radio Button控件用于在一组选择单个选项,而CheckBox控件用于在一组选择多个选项。 MFCRadioButton控件可以通过一些属性进行分组。比如说,通过将它们的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: MFCRadioButton控件常用于在多个选项进行单选操作。当需要将多个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分组操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值