MFC将多个checkbox变量绑定到数组中

MFC中有多个checkbox控件变量时的简便操作

本人在用MFC写客户端界面时,需要用到多个checkbox控件,点击其中一个checkbox的时候,需要将其他的checkbox控件变灰,由于控件太多,博主在想能不能把对控件操作变简单,于是想到了用数组的形式去操作控件。

前言

所使用的控件:11个checkbox控件

一、checkbox控件在界面中的布局及控件变量的命名

图中,总共有11个checkbox控件
在这里插入图片描述
若用单个变量对控件变量声明时,需要用到11个变量,举个例子:

CButton m_filesize_5min;
CButton m_filesize_10min;
CButton m_filesize_15min;
.....(此次省略不是重点)
CButton m_filesize_24h;

二、使用变量数组的形式对控件变量进行声明

1.修改控件变量

使用变量数组的形式进行声明,举个例子:

//原先的变量声明为
CButton m_filesize_5min;
CButton m_filesize_10min;
CButton m_filesize_15min;
.....
CButton m_filesize_24h;
//现在的变量声明修改为
CButton m_file_size[11];
//同时在对话框的.cpp文件中需要修改DoDataExchange()函数
//博主的对话框.cpp文件名为CsetdataDlg.cpp
//原先的DoDataExchange()函数
//5分钟所对应的checkbox的ID为IDC_CHECK8,其变量命名为m_filesize_5min
void CSetdataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CHECK8, m_filesize_5min);
	.....
	DDX_Control(pDX, IDC_CHECK18, m_filesize_24h);
}

//然后使用数组对其修改
//这就将IDC_CHECK8绑定到了m_file_size[0]上
void CSetdataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CHECK8, m_file_size[0]);
	.....
	DDX_Control(pDX, IDC_CHECK18, m_file_size[10]);
}

2.控件消息

为了更好的说明其修改能成功,博主给IDC_CHECK8(5分钟)的那个控件添加点击的事件,当点击5分钟的checkbo控件时,将其他的控件变灰设置为不可点击

//消息函数的定义
 //按下录音文件时长,5分钟
void CSetdataDlg::OnBnClickedCheck8()
{
	// TODO: 在此添加控件通知处理程序代码
	unsigned char ret = 0;
	//获取checkbox控件的勾选状态
	ret = m_file_size[0].GetCheck();
	//若按下,checkbox前面会有一个√,然后将其他的控件变灰
	if (ret == 1) {
		Set_FileSize_ButtonState(0, 1);
	}
	//若取消选中,checkbox前面的√会取消,其他控件的会变里亮
	else {
		Set_FileSize_ButtonState(0, 0);
	}
}  

//Set_FileSize_ButtonState函数的内部为
//index为目前点击的控件(这里将IDC_CHECK8(5分钟)的index设置为0,其他的以此类推下去)
//state为显示的状态,state = 1时表明我点击了其中一个控件,其他的控件就要变灰,state = 0时,我把其中一个控件的√取消了,其他的控件就要变亮
void CSetdataDlg::Set_FileSize_ButtonState(unsigned char index, unsigned char state)
{
	for (int i = 0; i < 11; i++) {
	//由于已经点击了IDC_CHECK8的控件,所以我不能对已经点击打√的控件变灰,这里就需要使用continue跳过
		if (i == index)
			continue;
		else {
			if (state == 1) 
				m_file_size[i].EnableWindow(0);
			else if(state == 0)
				m_file_size[i].EnableWindow(1);
		}
	}
}

演示的效果
1.点击5分钟的那个控件时,其他的控件变灰

2.取消5分钟的那个控件时,全部显示
在这里插入图片描述

3.点击10分钟的那个控件时,其他的控件变灰
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值