VC编程之【mfc】组框、单选框控件与复选框控件
小标 2018-08-28 来源 : 阅读 2019 评论 0

摘要:本文主要向大家介绍了VC编程之【mfc】组框、单选框控件与复选框控件,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之【mfc】组框、单选框控件与复选框控件,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。


  VC6中的MFC中的单选框与复选框控件也不简单,它没有VS中C#那样可以之间通过一个封装之后的函数进行判断,该单选框/复选框有没有被选中啊?或者控制单选框/复选框的选中状态。这东西比较复杂,通过相应的值来控制的。


一、基本目标
下面就用一个简单例子来说明VC6中的MFC中的单选框与复选框控件,点击“确定”按钮能够判断对话框中的所有单选框与复选框的选中状态。Radio1-Radio3互成一个组,组内仅能够有一个组员被选中,Radio4-Radio5也互成一组,选择Radio4能够令复选框中的Check1-Check3全选,选择Radio5则实现了复选框的反选功能。同时为了美观,还引入了组框控件。



二、制作过程
1、新建一个什么都没有的基于对话框的、静态DLL的MFC,怎么新建可以看我之前的《【mfc】学生信息管理,实现List控件节点的增删改查》(点击打开链接),然后在对话框中拖入组框,单选框与复选框。组框没什么好说的,可静态文本一样道理,就只有显示功能,不别设置任何函数。你只需要改改其Caption即可。


2、之后唯一需要注意的是单选框的样式工具,在单选框的样式中,如果你选择了一个单选框为组,那么其之后直到下一个被选为“组”单选框,都是属于这个“组“,组内的单选框仅能够有一个被悬泉,举个例子就很明白了。比如上图中有Radio1-5的五个单选框,如果仅把Radio1设置为组,那么Radio1-Radio5都属于这个组,Radio1-Radio5仅能够有一个被选取。如果把Radio1与Radio4设置为组,就像上图一样,那么Radio1-Radio3仅能够有一个被选取,Radio4-Radio5仅能够有一个被选取。再又如,如果把Radio1,Radio3,Radio5选择为组,那么Radio1-Radio2、Radio3-Radio4、Radio5分别仅能能够选择一个。对比于C#把同一个组内的单选框设置为同一groudID是不同的。


3、之后对这个主对话框中的单选框/复选框设置成员变量,以至于他们能够被程序控制,同样是Ctrl+W或者其它方式为这个对话框新建类向导,只是这个是在成员变量的标签页中设置。


4、一般成员变量的类型按默认即可,基本上也没有你选择余地,MFC就是规定通过布尔值的是与非来判断这个复选框是否被选中。


5、注意观察,单选框只有被选为“组”的单选框有成员变量设置,实际上这个“组”单选框已经包含其后的所有成员了。它通过int值来判断组内那个单选框被选中,-1是组内所有单选框都没有选中,0是组内第一个,1是组内第二个……以此类推


6、对所有单选框/复选框设置完成员变量之后,如下图所示:


7、点击“确定”就可以开始对函数的写作,你可以在ClassView中,找到刚才设置的成员变量,并且能够为单选框/复选框的初始状况,比如把m_Check1改成TRUE,那么这个对话框刚启动,复选框Check1就被选中了,而m_Radio1_3你把它改成0-2,那么所对应Radio1-3则最初就被选中。别问我改成3以上的值会怎么样,那就只有程序出错,Win32崩溃而已了。


8、之后,你还可以与按钮一样,在控件界面,双击任意一个单选框/复选框,添加这个单选框/复选框被选中时的消息映射函数。比如,我们为单选框Radio4添加复选框全选功能则写入如下函数:
void CCheckBox_RadioDlg::OnRadio4() 
{
 //这里注意不要写成m_Check1,m_Check2...的形式
 for (int i=IDC_CHECK1;i<=IDC_CHECK3;i++){
  ((CButton*)GetDlgItem(i))->SetCheck(1);
 } 
 
}((CButton*)GetDlgItem(i))->SetCheck(1);能够设置一个复选框的值,同时IDC_CHECK1-IDC_CHECK3虽然作为控件的ID,但实质上一个int,所以可以如上所示地进行遍历。

9、而选中Radio5,则现实反选功能,所以Radio5有如下的函数的函数:
//反选
void CCheckBox_RadioDlg::OnRadio5() 
{
 // TODO: Add your control notification handler code here
 for(int i=IDC_CHECK1;i<=IDC_CHECK3;i++){
  //通过((CButton*)GetDlgItem(i))->GetCheck()也可以拿到复选框的值
  //拿单选框的值同样是没有问题的
  //但是这个函数值是记录,你时候有选择这个单选框/复选框
  if(((CButton*)GetDlgItem(i))->GetCheck()){
   ((CButton*)GetDlgItem(i))->SetCheck(0);
  }
  else{
   ((CButton*)GetDlgItem(i))->SetCheck(1);
  }
 } 
}
10、至于点击“确定”按钮还有判断对话框内控件时候被选中,所以OnOK应该这样写,利用条件结构来根据单选框/复选框的选中情况,执行相应的语句。
void CCheckBox_RadioDlg::OnOK() 
{
 // TODO: Add extra validation here
 
 //CDialog::OnOK();
 //这句话必须存在,意思为重新遍历一下所有控制的变量值,把用户选取的值读取进来
 UpdateData();
 CString str;
 switch(m_Radio1_3){
 case -1:
  str="单选框1_3,你什么都没有选!";
  break;
 case 0:
  str="单选框1_3,你选择你Radio1";
  break;
 case 1:
  str="单选框1_3,你选择你Radio2";
  break;
 case 2:
  str="单选框1_3,你选择你Radio3";
  break;
 }
 AfxMessageBox(str);
 switch(m_Radio4_5){
 case -1:
  str="单选框4_5,你什么都没有选!";
  break;
 case 0:
  str="单选框4_5,你选择你Radio4";
  break;
 case 1:
  str="单选框4_5,你选择你Radio5";
  break;
 }
 AfxMessageBox(str);
 str="选中:";
 if(m_Check1)
  str+="【复选框1】";
 if(m_Check2)
  str+="【复选框2】";
 if(m_Check3)
  str+="【复选框3】";
 if(!m_Check1&&!m_Check2&&!m_Check3)
  str="你没有选择任何复选框!";
 AfxMessageBox(str);
}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved