基础介绍:

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

分组的原则是:

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

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

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

环境:Visual Studio2010

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


为该工程中的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;

}

效果图如下:

方法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

}

效果图如下:

方法3

单选控件每组只能定义个Control变量或Value变量。首先为每一组RadioButton关联一个Control变量,名字分别为m_RBtGroup1、m_RBtGroup2、m_RBtGroup3、m_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

}

效果图如下:

问题二:如何获取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);

}

MFC RadioButton用法详解相关推荐

  1. 【转】__declspec用法详解

    __declspec用法详解 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范 ...

  2. sizeof,strlen用法详解

    sizeof 前向声明: sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但 ...

  3. android butterknife 自定义view,ButterKnife用法详解.md

    # ButterKnife用法详解 ### 如何成为T型人才,垂直在一个行业中,必须要有一整套[知识体系](https://github.com/WeiSmart/Android-Advanced-C ...

  4. viewstate 解码 php,.NET_asp.net中ViewState的用法详解,在web窗体控件设置为runat = serv - phpStudy...

    asp.net中ViewState的用法详解 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了 ...

  5. python argv 详解_Python3 sys.argv[ ]用法详解

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可 ...

  6. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  7. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  8. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  9. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

最新文章

  1. java 运算符输入_java-运算符,IO输入输出,文件操作
  2. 计算机科学与技术专业综合二,计算机科学与技术专业综合一第二页
  3. php$后面加点有什么用,css和js后加问号和数字有什么用
  4. CSS如何实现内凹角效果 By 大漠
  5. 在Windows 7 下使用Visual Studio 2010 编写自动申请管理员权限运行的程序
  6. Mysql京东的一道面试题目 比较综合
  7. JIT编译器,内联和转义分析
  8. 第四章 consul cluster
  9. ibatis学习四---执行流程浅析
  10. Sublime Text下载使用
  11. 嵌入式linux地图,基于嵌入式Linux的MapInfo格式地图显示
  12. 2023年西北工业大学材料科学与工程考研考情与难度、参考书及上岸前辈初复试备考经验指导
  13. shader变体是什么_一种Shader变体收集和打包编译优化的思路
  14. 中国房地产总市值与GDP的比例
  15. 徐思201771010132《面向对象程序设计(java)》第九周学习总结
  16. Nacos-注册中心原理解析
  17. 期末题库是Excel版的,如何转化成Word版
  18. 叫你怎么设置手机成空号
  19. 使用shell让其在系统空闲一段时间后自动结束指定进程
  20. 2018王者服务器维护,王者荣耀:2018年最后一次更新,大量装备改动,玩法全部迭代!...

热门文章

  1. 居中符号怎么打_小学语文标点符号的正确书写格式(附图文展示),让孩子牢记考试不丢分!...
  2. 第二十五篇 hashlib模块(* *)
  3. 安装elasticsearch5.4.1集群和head插件
  4. 《第一行代码》学习笔记24-持久化技术(3)
  5. 2015生命之旅---第一站重庆
  6. 批处理文件将多台连接的手机安装同一个APP
  7. Python 输出的空格问题
  8. jQuery:localStorage用法
  9. Spring MVC 错误
  10. ZeroMQ之Publish/Subscribe (Java)