您的位置:首页 > 其它

MFC ComboBox的使用

2016-04-18 14:26 176 查看

MFC  RadioButton用法详解


(2013-11-13 11:54:14)


转载▼

 分类:
MFC
基础介绍:
radiobutton通常都是成组使用的,在一组里面是互斥的。
分组的原则是:
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表示第二个……)。
  
环境:VisualStudio2010
以对话框为例,工程名称为: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文件中:
代码部分如下
classCRadioButtonInstanceDlg : 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:
      BOOLm_Radio1;
      BOOL m_Radio3;
      BOOL m_Radio7;
      BOOL m_Radio9;
      CButton m_RBtGroup1;
      CButton m_RBtGroup2;
      CButton m_RBtGroup3;
      CButton m_RBtGroup4;
};
 
RadioButtonInstanceDlg.cpp文件中:
voidCRadioButtonInstanceDlg::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()方法中添加下面代码中绿色的部分即可。
BOOLCRadioButtonInstanceDlg::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初始状态。
 
代码如下:
BOOLCRadioButtonInstanceDlg::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);
CStringm_R1;
m_R1.Format(_T("thevalue of m_Radio1 is %d"),m_Radio1);
AfxMessageBox(m_R1);
 
可以根据需要为RadioButton添加鼠标单击事件
 
问题三:如何为RadioButton添加单击消息函数???
方法一:双击RadioButton按钮,进入消息函数,然后添加相应的代码。
方法二:用ClassWizard生成各单选按钮的单击消息函数,然后添加相应的代码。
例如:
voidCRadioButtonInstanceDlg::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);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio2()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio1=1;//选中此组的第二个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio3()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio3=0;//选中此组的第一个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio4()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio3=1;//选中此组的第二个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio5()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio3=2;//选中此组的第三个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio6()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio3=3;//选中此组的第四个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio7()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio7=0;//选中此组的第一个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio8()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio7=1;//选中此组的第二个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio9()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio9=0;//选中此组的第一个RadioButton
      UpdateData(FALSE);
}
voidCRadioButtonInstanceDlg::OnBnClickedRadio10()
{
      // TODO:
在此添加控件通知处理程序代码
      m_Radio9=1;//选中此组的第二个RadioButton
      UpdateData(FALSE);
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: