MFC RadioButton

来源:互联网 发布:ping命令测试网络丢包 编辑:程序博客网 时间:2024/06/03 03:39

基础介绍:

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

分组的原则是:

1、首先将RadioButton控件定好Tab顺序,具体方法:

工具栏“格式”—>Tab键顺序”选项选中(或者按键 Ctrl + D),

然后按照想要设定的次序,依次点击对话框上面的RadioButton按钮,Tab键顺序设定完成。

2、按照上面的Tab键顺序进行分组,然后设定每组第一个RadioButtonGroup属性为TRUE(其他为FALSE),分组完成,

即从当前设置Group属性为TRUERadioButton开始直到碰到下一个选上Group属性的RadioButton的前一个RadioButton为一个组,

也就是说系统只要检测到Group属性为TRUE,就认为是一个新的分组

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


单选事件:

方法一:最简单最常用

就是在OnInitDialog()中设置RadioButton的初始选中状态,因为默认都处于未选中状态

[cpp] view plain copy
  1. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE); //选上  
  2. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);//不选上  

然后结合RadioButton的点击事件来改变变量值,或者动态判断RadioButton是否被选中

[cpp] view plain copy
  1. if (((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck())  

方法二:比较复杂

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

如下图,共创建四组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);

}